From 66f388a504be6071170ef0246912657e95a4a397 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 28 Apr 2016 00:04:55 -0700 Subject: [PATCH 01/10] 3.0.0-beta.3 --- .gitignore | 2 - dist/js-data-http.js | 4276 ++++++++++++++++++++++++++++ dist/js-data-http.js.map | 1 + dist/js-data-http.min.js | 11 + dist/js-data-http.min.map | 1 + fetch/.gitignore | 2 - fetch/dist/js-data-fetch.js | 3011 ++++++++++++++++++++ fetch/dist/js-data-fetch.js.map | 1 + fetch/dist/js-data-fetch.min.js | 10 + fetch/dist/js-data-fetch.min.map | 1 + fetch/package.json | 2 +- node/.gitignore | 2 - node/dist/js-data-http-node.js | 3003 +++++++++++++++++++ node/dist/js-data-http-node.js.map | 1 + node/package.json | 4 +- 15 files changed, 10319 insertions(+), 9 deletions(-) create mode 100644 dist/js-data-http.js create mode 100644 dist/js-data-http.js.map create mode 100644 dist/js-data-http.min.js create mode 100644 dist/js-data-http.min.map create mode 100644 fetch/dist/js-data-fetch.js create mode 100644 fetch/dist/js-data-fetch.js.map create mode 100644 fetch/dist/js-data-fetch.min.js create mode 100644 fetch/dist/js-data-fetch.min.map create mode 100644 node/dist/js-data-http-node.js create mode 100644 node/dist/js-data-http-node.js.map diff --git a/.gitignore b/.gitignore index d810ef2..33745c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -dist/*.js -dist/*.map bower_components/ .idea/ diff --git a/dist/js-data-http.js b/dist/js-data-http.js new file mode 100644 index 0000000..f49a69f --- /dev/null +++ b/dist/js-data-http.js @@ -0,0 +1,4276 @@ +/*! +* js-data-http +* @version 3.0.0-beta.3 - Homepage +* @copyright (c) 2014-2016 js-data-http project authors +* @license MIT +* +* @overview HTTP (XHR) adapter for js-data in the browser. +*/ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("js-data")); + else if(typeof define === 'function' && define.amd) + define(["js-data"], factory); + else if(typeof exports === 'object') + exports["JSDataHttp"] = factory(require("js-data")); + else + root["JSDataHttp"] = factory(root["JSData"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var _jsData = __webpack_require__(1); + + var _jsDataAdapter = __webpack_require__(2); + + /* global fetch:true Headers:true Request:true */ + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + + var axios = __webpack_require__(3); + + + var hasFetch = false; + + try { + hasFetch = window && window.fetch; + } catch (e) {} + + function isValidString(value) { + return value != null && value !== ''; + } + function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); + } + function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + } + + function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + _jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!_jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (_jsData.utils.isObject(v)) { + v = _jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var __super__ = _jsDataAdapter.Adapter.prototype; + + var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false + }; + + /** + * HttpAdapter class. + * + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO + */ + function HttpAdapter(opts) { + var self = this; + opts || (opts = {}); + _jsData.utils.fillIn(opts, DEFAULTS); + _jsDataAdapter.Adapter.call(self, opts); + } + + /** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + exports.HttpAdapter = HttpAdapter; + + // Setup prototype inheritance from Adapter + HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } + }); + + Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: _jsDataAdapter.Adapter + }); + + /** + * Alternative to ES6 class syntax for extending `HttpAdapter`. + * + * __ES6__: + * ```javascript + * class MyHttpAdapter extends HttpAdapter { + * deserialize (Model, data, opts) { + * const data = super.deserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * } + * } + * ``` + * + * __ES5__: + * ```javascript + * var instanceProps = { + * // override deserialize + * deserialize: function (Model, data, opts) { + * var Ctor = this.constructor + * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize + * // call the super deserialize + * var data = superDeserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * }, + * say: function () { return 'hi' } + * } + * var classProps = { + * yell: function () { return 'HI' } + * } + * + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() + * adapter.say() // "hi" + * MyHttpAdapter.yell() // "HI" + * ``` + * + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. + */ + HttpAdapter.extend = _jsData.utils.extend; + + _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: _jsDataAdapter.noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (_jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = _jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (_jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + _jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(_jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.params)) { + return {}; + } + return _jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.suffix)) { + if (_jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = _jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; + } else { + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return _jsData.utils.reject(data); + } + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); + } + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); + }); + }).then(function (response) { + return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (_jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return _jsData.utils.reject(err); + }, + + + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (_jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!_jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.sum.call(self, mapper, field, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.update.call(self, mapper, id, props, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateAll.call(self, mapper, props, query, opts); + }, + + + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateMany.call(self, mapper, records, opts); + } + }); + + /** + * Add an Http actions to a mapper. + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addAction = function addAction(name, opts) { + if (!name || !_jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return _jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (_jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + _jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; + if (_jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + config.method = config.method || 'GET'; + config.mapper = self.name; + _jsData.utils.deepMixIn(config)(_opts); + return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }; + return mapper; + }; + }; + + /** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addActions = function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + _jsData.utils.forOwn(mapper, function (value, key) { + exports.addAction(key, value)(mapper); + }); + return mapper; + }; + }; + + /** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ + exports.version = { + beta: 3, + full: '3.0.0-beta.3', + major: 3, + minor: 0, + patch: 0 +}; + +/***/ }, +/* 1 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_1__; + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + (function (global, factory) { + true ? factory(exports, __webpack_require__(1)) : + typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : + (factory((global.Adapter = global.Adapter || {}),global.JSData)); + }(this, function (exports,jsData) { 'use strict'; + + var babelHelpers = {}; + babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + babelHelpers.defineProperty = function (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; + }; + + babelHelpers.slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + + babelHelpers; + + /** + * @name module:js-data-adapter.noop + */ + var noop = function noop() { + var self = this; + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = args[args.length - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.noop2 + */ + var noop2 = function noop2() { + var self = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var opts = args[args.length - 2]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.unique + */ + var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; + }; + + /** + * @name module:js-data-adapter.withoutRelations + */ + var withoutRelations = function withoutRelations(mapper, props) { + return jsData.utils.omit(props, mapper.relationFields || []); + }; + + var DEFAULTS = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, + + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false + }; + + /** + * {@link Adapter} class. + * + * @name module:js-data-adapter.Adapter + * @see Adapter + */ + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ + function Adapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS); + jsData.utils.fillIn(self, opts); + } + + /** + * @name module:js-data-adapter.reserved + */ + var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; + + /** + * {@link Response} class. + * + * @name module:js-data-adapter.Response + * @see Response + */ + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + var self = this; + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + self.data = data; + + jsData.utils.fillIn(self, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + self.op = op; + } + + /** + * Alternative to ES6 class syntax for extending `Adapter`. + * + * @name Adapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `Adapter`. + */ + Adapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. + * + * @name Adapter#dbg + * @method + */ + dbg: function dbg() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this.log.apply(this, ['debug'].concat(args)); + }, + + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._count(mapper, query, opts)); + }).then(function (results) { + var _results = babelHelpers.slicedToArray(results, 2); + + var data = _results[0]; + var result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'create'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = babelHelpers.slicedToArray(results, 2); + + var data = _results2[0]; + var result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = self.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'createMany'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = babelHelpers.slicedToArray(results, 2); + + var data = _results3[0]; + var result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = self.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = babelHelpers.slicedToArray(results, 2); + + var data = _results4[0]; + var result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = self.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = babelHelpers.slicedToArray(results, 2); + + var data = _results5[0]; + var result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = self.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var self = this; + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var _ret = function () { + var record = records; + return { + v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }) + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } else { + var keys = records.map(function (record) { + return self.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return self.findAll(relationDef, { + where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + var record = void 0, + op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._find(mapper, id, opts)); + }).then(function (results) { + var _results6 = babelHelpers.slicedToArray(results, 1); + + var _record = _results6[0]; + + if (!_record) { + return; + } + record = _record; + var tasks = []; + + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = self.loadHasOne(mapper, def, record, __opts); + } else { + task = self.loadHasMany(mapper, def, record, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, record, __opts); + } + if (task) { + tasks.push(task); + } + }); + + return Promise.all(tasks); + }).then(function () { + var response = new Response(record, {}, 'find'); + response.found = record ? 1 : 0; + response = self.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + opts || (opts = {}); + opts.with || (opts.with = []); + + var records = []; + var op = void 0; + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._findAll(mapper, query, opts)); + }).then(function (results) { + var _results7 = babelHelpers.slicedToArray(results, 1); + + var _records = _results7[0]; + + _records || (_records = []); + records = _records; + var tasks = []; + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasMany') { + task = self.loadHasMany(mapper, def, records, __opts); + } else { + task = self.loadHasOne(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + return Promise.all(tasks); + }).then(function () { + var response = new Response(records, {}, 'findAll'); + response.found = records.length; + response = self.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var self = this; + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return self.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var self = this; + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': self.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var _ret2 = function () { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + }); + return { + v: self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }) + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var self = this; + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(def.getRelation(), { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'contains': self.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return self.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); + }, + + + /** + * Logging utility method. Override this method if you want to send log + * messages to something other than the console. + * + * @name Adapter#log + * @method + * @param {string} level Log level. + * @param {...*} values Values to log. + */ + log: function log(level) { + for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + if (level && !args.length) { + args.push(level); + level = 'debug'; + } + if (level === 'debug' && !this.debug) { + return; + } + var prefix = level.toUpperCase() + ': (Adapter)'; + if (console[level]) { + var _console; + + (_console = console)[level].apply(_console, [prefix].concat(args)); + } else { + var _console2; + + (_console2 = console).log.apply(_console2, [prefix].concat(args)); + } + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + self.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results8 = babelHelpers.slicedToArray(results, 2); + + var data = _results8[0]; + var result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'update'; + self.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(self._update(mapper, id, props, opts)); + }).then(function (results) { + var _results9 = babelHelpers.slicedToArray(results, 2); + + var data = _results9[0]; + var result = _results9[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = self.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'updateAll'; + self.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results10 = babelHelpers.slicedToArray(results, 2); + + var data = _results10[0]; + var result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = jsData.utils.isUndefined(_records) ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results11 = babelHelpers.slicedToArray(results, 2); + + var data = _results11[0]; + var result = _results11[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + } + }); + + exports.noop = noop; + exports.noop2 = noop2; + exports.unique = unique; + exports.withoutRelations = withoutRelations; + exports.Adapter = Adapter; + exports.reserved = reserved; + exports.Response = Response; + + })); + //# sourceMappingURL=js-data-adapter.js.map + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(4); + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var defaults = __webpack_require__(5); + var utils = __webpack_require__(6); + var dispatchRequest = __webpack_require__(7); + var InterceptorManager = __webpack_require__(17); + var isAbsoluteURL = __webpack_require__(18); + var combineURLs = __webpack_require__(19); + var bind = __webpack_require__(20); + var transformData = __webpack_require__(12); + + function Axios(defaultConfig) { + this.defaults = utils.merge({}, defaultConfig); + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } + + Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = utils.merge({ + url: arguments[0] + }, arguments[1]); + } + + config = utils.merge(defaults, this.defaults, { method: 'get' }, config); + + // Support baseURL config + if (config.baseURL && !isAbsoluteURL(config.url)) { + config.url = combineURLs(config.baseURL, config.url); + } + + // Don't allow overriding defaults.withCredentials + config.withCredentials = config.withCredentials || this.defaults.withCredentials; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers || {} + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); + + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + }; + + var defaultInstance = new Axios(defaults); + var axios = module.exports = bind(Axios.prototype.request, defaultInstance); + + // Expose properties from defaultInstance + axios.defaults = defaultInstance.defaults; + axios.interceptors = defaultInstance.interceptors; + + // Factory for creating new instances + axios.create = function create(defaultConfig) { + return new Axios(defaultConfig); + }; + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = __webpack_require__(21); + + // Provide aliases for supported request methods + utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url + })); + }; + axios[method] = bind(Axios.prototype[method], defaultInstance); + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url, + data: data + })); + }; + axios[method] = bind(Axios.prototype[method], defaultInstance); + }); + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + var PROTECTION_PREFIX = /^\)\]\}',?\n/; + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + module.exports = { + transformRequest: [function transformRequest(data, headers) { + if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) { + // Set application/json if no Content-Type has been specified + if (!utils.isUndefined(headers)) { + utils.forEach(headers, function processContentTypeHeader(val, key) { + if (key.toLowerCase() === 'content-type') { + headers['Content-Type'] = val; + } + }); + + if (utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = 'application/json;charset=utf-8'; + } + } + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + data = data.replace(PROTECTION_PREFIX, ''); + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + patch: utils.merge(DEFAULT_CONTENT_TYPE), + post: utils.merge(DEFAULT_CONTENT_TYPE), + put: utils.merge(DEFAULT_CONTENT_TYPE) + }, + + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + } + }; + + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + 'use strict'; + + /*global toString:true*/ + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ + function isArray(val) { + return toString.call(val) === '[object Array]'; + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + function isArrayBuffer(val) { + return toString.call(val) === '[object ArrayBuffer]'; + } + + /** + * Determine if a value is a FormData + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ + function isFormData(val) { + return toString.call(val) === '[object FormData]'; + } + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ + function isString(val) { + return typeof val === 'string'; + } + + /** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ + function isNumber(val) { + return typeof val === 'number'; + } + + /** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ + function isUndefined(val) { + return typeof val === 'undefined'; + } + + /** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ + function isObject(val) { + return val !== null && typeof val === 'object'; + } + + /** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ + function isDate(val) { + return toString.call(val) === '[object Date]'; + } + + /** + * Determine if a value is a File + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + function isFile(val) { + return toString.call(val) === '[object File]'; + } + + /** + * Determine if a value is a Blob + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ + function isBlob(val) { + return toString.call(val) === '[object Blob]'; + } + + /** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + function isFunction(val) { + return toString.call(val) === '[object Function]'; + } + + /** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ + function isStream(val) { + return isObject(val) && isFunction(val.pipe); + } + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ + function trim(str) { + return str.replace(/^\s*/, '').replace(/\s*$/, ''); + } + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * typeof document.createElement -> undefined + */ + function isStandardBrowserEnv() { + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' && + typeof document.createElement === 'function' + ); + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ + function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object' && !isArray(obj)) { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + fn.call(null, obj[key], key, obj); + } + } + } + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (typeof result[key] === 'object' && typeof val === 'object') { + result[key] = merge(result[key], val); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; + } + + module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + trim: trim + }; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + /** + * Dispatch a request to the server using whichever adapter + * is supported by the current environment. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + module.exports = function dispatchRequest(config) { + return new Promise(function executor(resolve, reject) { + try { + var adapter; + + if (typeof config.adapter === 'function') { + // For custom adapter support + adapter = config.adapter; + } else if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(9); + } else if (typeof process !== 'undefined') { + // For node use HTTP adapter + adapter = __webpack_require__(9); + } + + if (typeof adapter === 'function') { + adapter(resolve, reject, config); + } + } catch (e) { + reject(e); + } + }); + }; + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8))) + +/***/ }, +/* 8 */ +/***/ function(module, exports) { + + // shim for using process in browser + + var process = module.exports = {}; + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = setTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + setTimeout(drainQueue, 0); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + var utils = __webpack_require__(6); + var buildURL = __webpack_require__(10); + var parseHeaders = __webpack_require__(11); + var transformData = __webpack_require__(12); + var isURLSameOrigin = __webpack_require__(13); + var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(14); + var settle = __webpack_require__(15); + + module.exports = function xhrAdapter(resolve, reject, config) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + var loadEvent = 'onreadystatechange'; + var xDomain = false; + + // For IE 8/9 CORS support + // Only supports POST and GET calls and doesn't returns the response headers. + // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. + if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { + request = new window.XDomainRequest(); + loadEvent = 'onload'; + xDomain = true; + } + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // For IE 9 CORS support. + request.onprogress = function handleProgress() {}; + request.ontimeout = function handleTimeout() {}; + + // Listen for ready state + request[loadEvent] = function handleLoad() { + if (!request || (request.readyState !== 4 && !xDomain)) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + if (request.status === 0) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: transformData( + responseData, + responseHeaders, + config.transformResponse + ), + // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) + status: request.status === 1223 ? 204 : request.status, + statusText: request.status === 1223 ? 'No Content' : request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new Error('Network Error')); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var err = new Error('timeout of ' + config.timeout + 'ms exceeded'); + err.timeout = config.timeout; + err.code = 'ECONNABORTED'; + reject(err); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + var cookies = __webpack_require__(16); + + // Add xsrf header + var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (config.withCredentials) { + request.withCredentials = true; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + if (request.responseType !== 'json') { + throw e; + } + } + } + + // Handle progress if needed + if (config.progress) { + if (config.method === 'post' || config.method === 'put') { + request.upload.addEventListener('progress', config.progress); + } else if (config.method === 'get') { + request.addEventListener('progress', config.progress); + } + } + + if (requestData === undefined) { + requestData = null; + } + + // Send the request + request.send(requestData); + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8))) + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + function encode(val) { + return encodeURIComponent(val). + replace(/%40/gi, '@'). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ + module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } + + if (!utils.isArray(val)) { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; + }; + + + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ + module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; + }; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; + }; + + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() + ); + + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + 'use strict'; + + // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js + + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + function E() { + this.message = 'String contains an invalid character'; + } + E.prototype = new Error; + E.prototype.code = 5; + E.prototype.name = 'InvalidCharacterError'; + + function btoa(input) { + var str = String(input); + var output = ''; + for ( + // initialize result and counter + var block, charCode, idx = 0, map = chars; + // if the next str index does not exist: + // change the mapping table to "=" + // check if d has no fractional digits + str.charAt(idx | 0) || (map = '=', idx % 1); + // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = str.charCodeAt(idx += 3 / 4); + if (charCode > 0xFF) { + throw new E(); + } + block = block << 8 | charCode; + } + return output; + } + + module.exports = btoa; + + +/***/ }, +/* 15 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + // Note: status is not exposed by XDomainRequest + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(response); + } + }; + + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() + ); + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(6); + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + module.exports = InterceptorManager; + + +/***/ }, +/* 18 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); + }; + + +/***/ }, +/* 19 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ + module.exports = function combineURLs(baseURL, relativeURL) { + return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, ''); + }; + + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + + 'use strict'; + + module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; + }; + + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ + module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + }; + + +/***/ } +/******/ ]) +}); +; +//# sourceMappingURL=js-data-http.js.map \ No newline at end of file diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map new file mode 100644 index 0000000..67f525a --- /dev/null +++ b/dist/js-data-http.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap f9314119ebc2ecd766ea","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9314119ebc2ecd766ea\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js new file mode 100644 index 0000000..bff7b3b --- /dev/null +++ b/dist/js-data-http.min.js @@ -0,0 +1,11 @@ +/*! +* js-data-http +* @version 3.0.0-beta.3 - Homepage +* @copyright (c) 2014-2016 js-data-http project authors +* @license MIT +* +* @overview HTTP (XHR) adapter for js-data in the browser. +*/ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data")):"function"==typeof define&&define.amd?define(["js-data"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data")):e.JSDataHttp=t(e.JSData)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(r).join(t)}function i(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a)(r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return l.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:3,full:"3.0.0-beta.3",major:3,minor:0,patch:0}},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var s=void 0;return s=u.op="beforeUpdate",t.utils.resolve(a[s](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,s=u.op="update",a.dbg(s,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),s=u.op="afterUpdate",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var s=void 0;return s=u.op="beforeUpdateAll",t.utils.resolve(a[s](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,s=u.op="updateAll",a.dbg(s,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),s=u.op="afterUpdateAll",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;n>8-a%1*8)){if(r=i.charCodeAt(a+=.75),r>255)throw new n;t=t<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){"use strict";e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){"use strict";var r=n(6);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,u){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),u===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(6);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r +* @copyright (c) 2014-2016 js-data-http project authors +* @license MIT +* +* @overview HTTP adapter for js-data that uses the fetch API. +*/ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("js-data"), require("undefined")); + else if(typeof define === 'function' && define.amd) + define(["js-data", "undefined"], factory); + else if(typeof exports === 'object') + exports["JSDataHttp"] = factory(require("js-data"), require("undefined")); + else + root["JSDataHttp"] = factory(root["JSData"], root["undefined"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var _jsData = __webpack_require__(1); + + var _jsDataAdapter = __webpack_require__(2); + + /* global fetch:true Headers:true Request:true */ + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + + var axios = __webpack_require__(3); + + + var hasFetch = false; + + try { + hasFetch = window && window.fetch; + } catch (e) {} + + function isValidString(value) { + return value != null && value !== ''; + } + function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); + } + function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + } + + function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + _jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!_jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (_jsData.utils.isObject(v)) { + v = _jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var __super__ = _jsDataAdapter.Adapter.prototype; + + var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false + }; + + /** + * HttpAdapter class. + * + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO + */ + function HttpAdapter(opts) { + var self = this; + opts || (opts = {}); + _jsData.utils.fillIn(opts, DEFAULTS); + _jsDataAdapter.Adapter.call(self, opts); + } + + /** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + exports.HttpAdapter = HttpAdapter; + + // Setup prototype inheritance from Adapter + HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } + }); + + Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: _jsDataAdapter.Adapter + }); + + /** + * Alternative to ES6 class syntax for extending `HttpAdapter`. + * + * __ES6__: + * ```javascript + * class MyHttpAdapter extends HttpAdapter { + * deserialize (Model, data, opts) { + * const data = super.deserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * } + * } + * ``` + * + * __ES5__: + * ```javascript + * var instanceProps = { + * // override deserialize + * deserialize: function (Model, data, opts) { + * var Ctor = this.constructor + * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize + * // call the super deserialize + * var data = superDeserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * }, + * say: function () { return 'hi' } + * } + * var classProps = { + * yell: function () { return 'HI' } + * } + * + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() + * adapter.say() // "hi" + * MyHttpAdapter.yell() // "HI" + * ``` + * + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. + */ + HttpAdapter.extend = _jsData.utils.extend; + + _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: _jsDataAdapter.noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (_jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = _jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (_jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + _jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(_jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.params)) { + return {}; + } + return _jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.suffix)) { + if (_jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = _jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; + } else { + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return _jsData.utils.reject(data); + } + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); + } + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); + }); + }).then(function (response) { + return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (_jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return _jsData.utils.reject(err); + }, + + + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (_jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!_jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.sum.call(self, mapper, field, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.update.call(self, mapper, id, props, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateAll.call(self, mapper, props, query, opts); + }, + + + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateMany.call(self, mapper, records, opts); + } + }); + + /** + * Add an Http actions to a mapper. + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addAction = function addAction(name, opts) { + if (!name || !_jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return _jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (_jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + _jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; + if (_jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + config.method = config.method || 'GET'; + config.mapper = self.name; + _jsData.utils.deepMixIn(config)(_opts); + return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }; + return mapper; + }; + }; + + /** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addActions = function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + _jsData.utils.forOwn(mapper, function (value, key) { + exports.addAction(key, value)(mapper); + }); + return mapper; + }; + }; + + /** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ + exports.version = { + beta: 3, + full: '3.0.0-beta.3', + major: 3, + minor: 0, + patch: 0 +}; + +/***/ }, +/* 1 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_1__; + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + (function (global, factory) { + true ? factory(exports, __webpack_require__(1)) : + typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : + (factory((global.Adapter = global.Adapter || {}),global.JSData)); + }(this, function (exports,jsData) { 'use strict'; + + var babelHelpers = {}; + babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + babelHelpers.defineProperty = function (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; + }; + + babelHelpers.slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + + babelHelpers; + + /** + * @name module:js-data-adapter.noop + */ + var noop = function noop() { + var self = this; + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = args[args.length - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.noop2 + */ + var noop2 = function noop2() { + var self = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var opts = args[args.length - 2]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.unique + */ + var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; + }; + + /** + * @name module:js-data-adapter.withoutRelations + */ + var withoutRelations = function withoutRelations(mapper, props) { + return jsData.utils.omit(props, mapper.relationFields || []); + }; + + var DEFAULTS = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, + + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false + }; + + /** + * {@link Adapter} class. + * + * @name module:js-data-adapter.Adapter + * @see Adapter + */ + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ + function Adapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS); + jsData.utils.fillIn(self, opts); + } + + /** + * @name module:js-data-adapter.reserved + */ + var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; + + /** + * {@link Response} class. + * + * @name module:js-data-adapter.Response + * @see Response + */ + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + var self = this; + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + self.data = data; + + jsData.utils.fillIn(self, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + self.op = op; + } + + /** + * Alternative to ES6 class syntax for extending `Adapter`. + * + * @name Adapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `Adapter`. + */ + Adapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. + * + * @name Adapter#dbg + * @method + */ + dbg: function dbg() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this.log.apply(this, ['debug'].concat(args)); + }, + + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._count(mapper, query, opts)); + }).then(function (results) { + var _results = babelHelpers.slicedToArray(results, 2); + + var data = _results[0]; + var result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'create'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = babelHelpers.slicedToArray(results, 2); + + var data = _results2[0]; + var result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = self.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'createMany'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = babelHelpers.slicedToArray(results, 2); + + var data = _results3[0]; + var result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = self.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = babelHelpers.slicedToArray(results, 2); + + var data = _results4[0]; + var result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = self.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = babelHelpers.slicedToArray(results, 2); + + var data = _results5[0]; + var result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = self.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var self = this; + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var _ret = function () { + var record = records; + return { + v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }) + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } else { + var keys = records.map(function (record) { + return self.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return self.findAll(relationDef, { + where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + var record = void 0, + op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._find(mapper, id, opts)); + }).then(function (results) { + var _results6 = babelHelpers.slicedToArray(results, 1); + + var _record = _results6[0]; + + if (!_record) { + return; + } + record = _record; + var tasks = []; + + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = self.loadHasOne(mapper, def, record, __opts); + } else { + task = self.loadHasMany(mapper, def, record, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, record, __opts); + } + if (task) { + tasks.push(task); + } + }); + + return Promise.all(tasks); + }).then(function () { + var response = new Response(record, {}, 'find'); + response.found = record ? 1 : 0; + response = self.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + opts || (opts = {}); + opts.with || (opts.with = []); + + var records = []; + var op = void 0; + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._findAll(mapper, query, opts)); + }).then(function (results) { + var _results7 = babelHelpers.slicedToArray(results, 1); + + var _records = _results7[0]; + + _records || (_records = []); + records = _records; + var tasks = []; + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasMany') { + task = self.loadHasMany(mapper, def, records, __opts); + } else { + task = self.loadHasOne(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + return Promise.all(tasks); + }).then(function () { + var response = new Response(records, {}, 'findAll'); + response.found = records.length; + response = self.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var self = this; + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return self.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var self = this; + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': self.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var _ret2 = function () { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + }); + return { + v: self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }) + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var self = this; + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(def.getRelation(), { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'contains': self.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return self.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); + }, + + + /** + * Logging utility method. Override this method if you want to send log + * messages to something other than the console. + * + * @name Adapter#log + * @method + * @param {string} level Log level. + * @param {...*} values Values to log. + */ + log: function log(level) { + for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + if (level && !args.length) { + args.push(level); + level = 'debug'; + } + if (level === 'debug' && !this.debug) { + return; + } + var prefix = level.toUpperCase() + ': (Adapter)'; + if (console[level]) { + var _console; + + (_console = console)[level].apply(_console, [prefix].concat(args)); + } else { + var _console2; + + (_console2 = console).log.apply(_console2, [prefix].concat(args)); + } + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + self.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results8 = babelHelpers.slicedToArray(results, 2); + + var data = _results8[0]; + var result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'update'; + self.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(self._update(mapper, id, props, opts)); + }).then(function (results) { + var _results9 = babelHelpers.slicedToArray(results, 2); + + var data = _results9[0]; + var result = _results9[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = self.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'updateAll'; + self.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results10 = babelHelpers.slicedToArray(results, 2); + + var data = _results10[0]; + var result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = jsData.utils.isUndefined(_records) ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results11 = babelHelpers.slicedToArray(results, 2); + + var data = _results11[0]; + var result = _results11[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + } + }); + + exports.noop = noop; + exports.noop2 = noop2; + exports.unique = unique; + exports.withoutRelations = withoutRelations; + exports.Adapter = Adapter; + exports.reserved = reserved; + exports.Response = Response; + + })); + //# sourceMappingURL=js-data-adapter.js.map + +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + module.exports = undefined; + +/***/ } +/******/ ]) +}); +; +//# sourceMappingURL=js-data-fetch.js.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map new file mode 100644 index 0000000..644f281 --- /dev/null +++ b/fetch/dist/js-data-fetch.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap ca100470a5654be6eafb","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;ACTA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFA,KAAM,QAAQ,oBAAQ,CAAR,CAAd;;;AAQA,KAAI,WAAW,KAAf;;AAEA,KAAI;AACF,cAAW,UAAU,OAAO,KAA5B;AACD,EAFD,CAEE,OAAO,CAAP,EAAU,CAAE;;AAEd,UAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,UAAQ,SAAS,IAAT,IAAiB,UAAU,EAAnC;AACD;AACD,UAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,iBAAc,YAAY,EAA1B;AACA,UAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;AACD;AACD,UAAS,QAAT,GAA4B;AAAA,qCAAN,IAAM;AAAN,SAAM;AAAA;;AAC1B,OAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;AACA,UAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;AACD;;AAED,UAAS,MAAT,CAAiB,GAAjB,EAAsB;AACpB,UAAO,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;AAQD;;AAED,UAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,OAAI,CAAC,MAAL,EAAa;AACX,YAAO,GAAP;AACD;;AAED,OAAM,QAAQ,EAAd;;AAEA,iBAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;AACvC,SAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;AAC9C;AACD;AACD,SAAI,CAAC,cAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;AACvB,aAAM,CAAC,GAAD,CAAN;AACD;;AAED,SAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,WAAI,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAAhC,EAAiD;AAC/C,aAAI,EAAE,WAAF,EAAJ;AACD,QAFD,MAEO,IAAI,cAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;AAC5B,aAAI,cAAM,MAAN,CAAa,CAAb,CAAJ;AACD;AACD,aAAM,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;AACD,MAPD;AAQD,IAhBD;;AAkBA,OAAI,MAAM,MAAN,GAAe,CAAnB,EAAsB;AACpB,YAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;AACD;;AAED,UAAO,GAAP;AACD;;AAED,KAAM,YAAY,uBAAQ,SAA1B;;AAEA,KAAM,WAAW;;;;;;AAMf,aAAU,EANK;;;;;;;AAaf,uBAAoB,KAbL;;;;;;AAmBf,SAAM,KAnBS;;;;;;AAyBf,eAAY,EAzBG;;;;;;AA+Bf,WAAQ,EA/BO;;;;;;;AAsCf,aAAU;AAtCK,EAAjB;;;;;;;;;;;;;;;;AAuDA,UAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,OAAM,OAAO,IAAb;AACA,YAAS,OAAO,EAAhB;AACA,iBAAM,MAAN,CAAa,IAAb,EAAmB,QAAnB;AACA,0BAAQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;AACD;;;;;;AAMD,SAAQ,WAAR,GAAsB,WAAtB;;;AAGA,aAAY,SAAZ,GAAwB,OAAO,MAAP,CAAc,uBAAQ,SAAtB,EAAiC;AACvD,gBAAa;AACX,YAAO,WADI;AAEX,iBAAY,KAFD;AAGX,eAAU,IAHC;AAIX,mBAAc;AAJH;AAD0C,EAAjC,CAAxB;;AASA,QAAO,cAAP,CAAsB,WAAtB,EAAmC,WAAnC,EAAgD;AAC9C,iBAAc,IADgC;AAE9C;AAF8C,EAAhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,aAAY,MAAZ,GAAqB,cAAM,MAA3B;;AAEA,eAAM,sBAAN,CAA6B,YAAY,SAAzC,EAAoD;;;;;;;;;AASlD,iCATkD;;;;;;;;;;AAmBlD,iCAnBkD;;;;;;;;;AA4BlD,kCA5BkD;;;;;;;;;;;AAuClD,kCAvCkD;;;;;;;;;;;AAkDlD,iCAlDkD;;;;;;;;;AA2DlD,iCA3DkD;;;;;;;;;AAoElD,iCApEkD;;;;;;;;AA4ElD,kCA5EkD;;;;;;;;;;AAsFlD,kCAtFkD;;;;;;;;;;AAgGlD,iCAhGkD;;AAkGlD,SAlGkD,kBAkG1C,MAlG0C,EAkGlC,KAlGkC,EAkG3B,IAlG2B,EAkGrB;AAC3B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1GiD;AA4GlD,UA5GkD,mBA4GzC,MA5GyC,EA4GjC,KA5GiC,EA4G1B,IA5G0B,EA4GpB;AAC5B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IArHiD;AAuHlD,cAvHkD,uBAuHrC,MAvHqC,EAuH7B,KAvH6B,EAuHtB,IAvHsB,EAuHhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAhIiD;AAkIlD,WAlIkD,oBAkIxC,MAlIwC,EAkIhC,EAlIgC,EAkI5B,IAlI4B,EAkItB;AAC1B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1IiD;AA4IlD,cA5IkD,uBA4IrC,MA5IqC,EA4I7B,KA5I6B,EA4ItB,IA5IsB,EA4IhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IApJiD;AAsJlD,OAtJkD,gBAsJ5C,MAtJ4C,EAsJpC,IAtJoC,EAsJ9B,QAtJ8B,EAsJpB;AAC5B,YAAO,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;AACD,IAxJiD;AA0JlD,QA1JkD,iBA0J3C,MA1J2C,EA0JnC,EA1JmC,EA0J/B,IA1J+B,EA0JzB;AACvB,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAlKiD;AAoKlD,WApKkD,oBAoKxC,MApKwC,EAoKhC,KApKgC,EAoKzB,IApKyB,EAoKnB;AAC7B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA5KiD;AA8KlD,OA9KkD,gBA8K5C,MA9K4C,EA8KpC,KA9KoC,EA8K7B,KA9K6B,EA8KtB,IA9KsB,EA8KhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAtLiD;AAwLlD,UAxLkD,mBAwLzC,MAxLyC,EAwLjC,EAxLiC,EAwL7B,KAxL6B,EAwLtB,IAxLsB,EAwLhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAjMiD;AAmMlD,aAnMkD,sBAmMtC,MAnMsC,EAmM9B,KAnM8B,EAmMvB,KAnMuB,EAmMhB,IAnMgB,EAmMV;AACtC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IA5MiD;AA8MlD,cA9MkD,uBA8MrC,MA9MqC,EA8M7B,OA9M6B,EA8MpB,IA9MoB,EA8Md;AAClC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAvNiD;;;;;;;;;;;;;;;AAqOlD,QArOkD,iBAqO3C,MArO2C,EAqOnC,KArOmC,EAqO5B,IArO4B,EAqOtB;AAC1B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,KAAZ,GAAoB,IAApB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,KAAV,CAAgB,IAAhB,CAAqB,IAArB,EAA2B,MAA3B,EAAmC,KAAnC,EAA0C,IAA1C,CAAP;AACD,IAhPiD;;;;;;;;;;;;;;;AA8PlD,SA9PkD,kBA8P1C,MA9P0C,EA8PlC,KA9PkC,EA8P3B,IA9P2B,EA8PrB;AAC3B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,KAApC,EAA2C,IAA3C,CAAP;AACD,IAtQiD;;;;;;;;;;;;;;;AAoRlD,aApRkD,sBAoRtC,MApRsC,EAoR9B,KApR8B,EAoRvB,IApRuB,EAoRjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA5RiD;;;;;;;;;;;;;;AAySlD,MAzSkD,eAyS7C,GAzS6C,EAySxC,MAzSwC,EAyShC,IAzSgC,EAyS1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjUiD;;;;;;;;;;;;;;AA8UlD,cA9UkD,uBA8UrC,MA9UqC,EA8U7B,QA9U6B,EA8UnB,IA9UmB,EA8Ub;AACnC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;AACtC,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;AACxC,cAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;AACD;AACD,SAAI,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;AAC/C,cAAO,SAAS,IAAhB;AACD;AACD,YAAO,QAAP;AACD,IA1ViD;;;;;;;;;;;;;;;AAwWlD,UAxWkD,mBAwWzC,MAxWyC,EAwWjC,EAxWiC,EAwW7B,IAxW6B,EAwWvB;AACzB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,EAArC,EAAyC,IAAzC,CAAP;AACD,IAhXiD;;;;;;;;;;;;;;;AA8XlD,aA9XkD,sBA8XtC,MA9XsC,EA8X9B,KA9X8B,EA8XvB,IA9XuB,EA8XjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAxYiD;;;;;;;;;;AAiZlD,QAjZkD,mBAiZlC;AACd,SAAI,OAAJ,EAAa;AAAA;;AACX,4BAAQ,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;AACD;AACF,IArZiD;;;;;;;;;;;;;;;;AAoalD,QApakD;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,eAoa3C,MApa2C,EAoanC,IApamC,EAoa7B;AACnB,SAAM,gBAAgB;AACpB,eAAQ,OAAO,MADK;;AAGpB,gBAAS,IAAI,OAAJ,CAAY,OAAO,OAAnB;AAHW,MAAtB;;AAMA,SAAI,OAAO,IAAX,EAAiB;AACf,qBAAc,IAAd,GAAqB,cAAM,MAAN,CAAa,OAAO,IAApB,CAArB;AACD;;AAED,YAAO,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAZ,EAAiD,aAAjD,CAAN,EAAuE,IAAvE,CAA4E,UAAU,QAAV,EAAoB;AACrG,gBAAS,MAAT,GAAkB;AAChB,iBAAQ,OAAO,MADC;AAEhB,cAAK,OAAO;AAFI,QAAlB;AAIA,cAAO,SAAS,IAAT,GAAgB,IAAhB,CAAqB,UAAU,IAAV,EAAgB;AAC1C,kBAAS,IAAT,GAAgB,IAAhB;AACA,gBAAO,QAAP;AACD,QAHM,CAAP;AAID,MATM,CAAP;AAUD,IAzbiD;;;;;;;;;;;;;;;AAuclD,OAvckD,gBAuc5C,MAvc4C,EAucpC,EAvcoC,EAuchC,IAvcgC,EAuc1B;AACtB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,IAAV,CAAe,IAAf,CAAoB,IAApB,EAA0B,MAA1B,EAAkC,EAAlC,EAAsC,IAAtC,CAAP;AACD,IA/ciD;;;;;;;;;;;;;;;AA6dlD,UA7dkD,mBA6dzC,MA7dyC,EA6djC,KA7diC,EA6d1B,IA7d0B,EA6dpB;AAC5B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,KAArC,EAA4C,IAA5C,CAAP;AACD,IAveiD;;;;;;;;;;;;;AAmflD,MAnfkD,eAmf7C,GAnf6C,EAmfxC,MAnfwC,EAmfhC,IAnfgC,EAmf1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IA3gBiD;;;;;;;;;;;AAqhBlD,cArhBkD,uBAqhBrC,MArhBqC,EAqhB7B,EArhB6B,EAqhBzB,IArhByB,EAqhBnB;AAC7B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,cAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;AACA,SAAM,eAAe,OAAO,YAAP,IAAuB,EAA5C;AACA,SAAI,WAAW,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;AAEA,kBAAa,OAAb,CAAqB,UAAU,GAAV,EAAe;AAClC,WAAI,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;AAC3C;AACD;AACD,WAAI,aAAJ;AACA,WAAM,YAAY,IAAI,UAAtB;AACA,WAAM,YAAY,IAAI,WAAJ,EAAlB;AACA,WAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;AAEA,WAAI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;AAClD,aAAI,aAAa,KAAjB,EAAwB;AACtB,kBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;AACD;AACD,gBAAO,KAAP;AACD,QALD,MAKO;AACL,gBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;;AAEA,aAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,kBAAO,EAAP;AACD;;AAED,aAAI,IAAJ,EAAU;AACR,sBAAW,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0B,cAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;AACD;;AAED,aAAI,QAAJ,EAAc;AAAA;AACZ,oBAAO,KAAK,QAAZ;AACA,iBAAM,QAAQ,EAAd;AACA,2BAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,qBAAM,GAAN,IAAa,KAAb;AACD,cAFD;AAGA,2BAAM,CAAN,CAAQ,KAAR,EAAe,SAAf;AACA,wBAAW,SAAS,KAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;AACA;AAAA,kBAAO;AAAP;AARY;;AAAA;AASb;AACF;AACF,MApCD;;AAsCA,YAAO,QAAP;AACD,IAnkBiD;;;;;;;;;;;AA6kBlD,UA7kBkD,mBA6kBzC,MA7kByC,EA6kBjC,MA7kBiC,EA6kBzB,EA7kByB,EA6kBrB,IA7kBqB,EA6kBf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,OAAO,CACX,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,KAAK,QAA1C,GAAqD,OAAO,QAAhG,GAA4G,KAAK,QADtG,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0B,cAAM,QAAN,CAAe,EAAf,KAAsB,cAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;AAIA,SAAI,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;AACpE,YAAK,IAAL,CAAU,EAAV;AACD;AACD,YAAO,SAAS,KAAT,gBAAsB,IAAtB,CAAP;AACD,IAxlBiD;AA0lBlD,YA1lBkD,qBA0lBvC,IA1lBuC,EA0lBjC;AACf,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,cAAO,EAAP;AACD;AACD,YAAO,cAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;AACD,IAhmBiD;AAkmBlD,YAlmBkD,qBAkmBvC,MAlmBuC,EAkmB/B,IAlmB+B,EAkmBzB;AACvB,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,WAAI,cAAM,WAAN,CAAkB,OAAO,MAAzB,CAAJ,EAAsC;AACpC,gBAAO,KAAK,MAAZ;AACD;AACD,cAAO,OAAO,MAAd;AACD;AACD,YAAO,KAAK,MAAZ;AACD,IA3mBiD;;;;;;;;;;;;AAsnBlD,OAtnBkD,gBAsnB5C,MAtnB4C,EAsnBpC,IAtnBoC,EAsnB9B;AAClB,SAAM,OAAO,IAAb;AACA,SAAM,QAAQ,IAAI,IAAJ,EAAd;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,UAAU,OAAO,IAAvB;AACA,SAAM,QAAQ,OAAO,KAArB;AACA,SAAM,UAAU,OAAO,OAAvB;AACA,cAAS,cAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;AACA,cAAS,cAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;AACA,YAAO,IAAP,GAAc,OAAd;AACA,YAAO,KAAP,GAAe,KAAf;AACA,YAAO,OAAP,GAAiB,OAAjB;AACA,SAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;AACxE,cAAO,GAAP,IAAc,GAAd;AACD;AACD,YAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;AACA,SAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;AACA,SAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;AAC7E,cAAO,GAAP,IAAc,MAAd;AACD;;AAED,cAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,WAAM,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;AACA,WAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;AAC3C,aAAI,KAAK,GAAT,EAAc;AACZ,gBAAK,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB;AACD;AACD,gBAAO,IAAP;AACD,QALD,MAKO;AACL,aAAI,KAAK,KAAT,EAAgB;AACd,gBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;AACD;AACD,gBAAO,cAAM,MAAN,CAAa,IAAb,CAAP;AACD;AACF;;AAED,SAAI,CAAC,KAAK,IAAV,EAAgB;AACd,aAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN;AACD;;AAED,YAAO,cAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EAA6C,IAA7C,CAAkD,UAAU,OAAV,EAAmB;AAC1E,gBAAS,WAAW,MAApB;AACA,WAAI,aAAa,KAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,KAAK,IAArD,CAAJ,EAAgE;AAC9D,gBAAO,KAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;AACD;AACD,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAuD,UAAU,GAAV,EAAe;AAC3E,gBAAO,KAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAP;AACD,QAFM,CAAP;AAGD,MARM,EAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,cAAM,OAAN,CAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EAAsD,IAAtD,CAA2D,UAAU,SAAV,EAAqB;AACrF,gBAAO,aAAa,QAApB;AACD,QAFM,CAAP;AAGD,MAZM,CAAP;AAaD,IA3qBiD;;;;;;;;;;;;;;AAwrBlD,OAxrBkD,gBAwrB5C,GAxrB4C,EAwrBvC,IAxrBuC,EAwrBjC,MAxrBiC,EAwrBzB,IAxrByB,EAwrBnB;AAC7B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,YAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,MAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,WAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjtBiD;;;;;;;;;;;;;;AA8tBlD,MA9tBkD,eA8tB7C,GA9tB6C,EA8tBxC,IA9tBwC,EA8tBlC,MA9tBkC,EA8tB1B,IA9tB0B,EA8tBpB;AAC5B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAvvBiD;;;;;;;;;;;;;AAmwBlD,iBAnwBkD,0BAmwBlC,MAnwBkC,EAmwB1B,MAnwB0B,EAmwBlB,IAnwBkB,EAmwBZ;AACpC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACzC,cAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;AAC3C,cAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;AACD;AACD,YAAO,MAAP;AACD,IA5wBiD;;;;;;;;;;;;;;;;AA2xBlD,gBA3xBkD,yBA2xBnC,GA3xBmC,EA2xB9B,MA3xB8B,EA2xBtB,IA3xBsB,EA2xBhB;AAChC,YAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AACD,IA7xBiD;;;;;;;;;;;;;AAyyBlD,YAzyBkD,qBAyyBvC,MAzyBuC,EAyyB/B,IAzyB+B,EAyyBzB,IAzyByB,EAyyBnB;AAC7B,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AACpC,cAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;AACtC,cAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;AACD;AACD,YAAO,IAAP;AACD,IAlzBiD;;;;;;;;;;;;;;;;AAi0BlD,MAj0BkD,eAi0B7C,MAj0B6C,EAi0BrC,KAj0BqC,EAi0B9B,KAj0B8B,EAi0BvB,IAj0BuB,EAi0BjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,SAAI,CAAC,cAAM,KAAN,CAAY,QAAZ,CAAqB,KAArB,CAAL,EAAkC;AAChC,aAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD;AACD,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,GAAV,CAAc,IAAd,CAAmB,IAAnB,EAAyB,MAAzB,EAAiC,KAAjC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA/0BiD;;;;;;;;;;;;;;AA41BlD,SA51BkD,kBA41B1C,MA51B0C,EA41BlC,EA51BkC,EA41B9B,KA51B8B,EA41BvB,IA51BuB,EA41BjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,EAApC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAp2BiD;;;;;;;;;;;;;;AAi3BlD,YAj3BkD,qBAi3BvC,MAj3BuC,EAi3B/B,KAj3B+B,EAi3BxB,KAj3BwB,EAi3BjB,IAj3BiB,EAi3BX;AACrC,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,SAAV,CAAoB,IAApB,CAAyB,IAAzB,EAA+B,MAA/B,EAAuC,KAAvC,EAA8C,KAA9C,EAAqD,IAArD,CAAP;AACD,IA33BiD;;;;;;;;;;;;;;;;;;;;AA84BlD,aA94BkD,sBA84BtC,MA94BsC,EA84B9B,OA94B8B,EA84BrB,IA94BqB,EA84Bf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,OAAxC,EAAiD,IAAjD,CAAP;AACD;AAt5BiD,EAApD;;;;;;;;;;;;;;;;;AAw6BA,SAAQ,SAAR,GAAoB,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;AAClD,OAAI,CAAC,IAAD,IAAS,CAAC,cAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;AAClC,WAAM,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;AACD;AACD,UAAO,UAAU,MAAV,EAAkB;AACvB,SAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,aAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;AACD;AACD,UAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,cAAO,MAAP;AAAe,MAAlE;AACA,UAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,cAAO,QAAP;AAAiB,MAAxE;AACA,UAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,cAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AAA0B,MAAtF;AACA,YAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAClC,WAAM,OAAO,IAAb;AACA,WAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,iBAAQ,EAAR;AACD;AACD,eAAQ,SAAS,EAAjB;AACA,WAAI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAArB,IAAuC,MAAvD,CAAd;AACA,WAAI,SAAS,EAAb;AACA,qBAAM,MAAN,CAAa,MAAb,EAAqB,IAArB;AACA,WAAI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAhD,EAA0D;AACxD,eAAM,QAAN,GAAiB,OAAO,QAAxB;AACD;AACD,WAAI,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;AAC3C,gBAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;AACD,QAFD,MAEO;AACL,aAAI,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0B,cAAM,MAAN,CAAa,EAAb,IAAmB,EAAnB,GAAwB,IAAlD,EAAwD,KAAxD,CAFS,CAAX;AAIA,aAAI,cAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;AACpB,gBAAK,IAAL,CAAU,EAAV;AACD;AACD,cAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;AACA,gBAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;AACD;AACD,cAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;AACA,cAAO,MAAP,GAAgB,KAAK,IAArB;AACA,qBAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;AACA,cAAO,cAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OADvB,EAEJ,IAFI,CAEC,UAAU,MAAV,EAAkB;AAAE,gBAAO,QAAQ,IAAR,CAAa,MAAb,CAAP;AAA6B,QAFlD,EAGJ,IAHI,CAGC,UAAU,IAAV,EAAgB;AACpB,aAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,gBAAK,MAAL,CAAY,MAAZ,GAAqB,KAAK,IAA1B;AACD;AACD,gBAAO,IAAP;AACD,QARI,EASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QATxB,EASkC,MAAM,aAAN,IAAuB,KAAK,aAT9D,CAAP;AAUD,MAtCD;AAuCA,YAAO,MAAP;AACD,IA/CD;AAgDD,EApDD;;;;;;;;;;;;;AAiEA,SAAQ,UAAR,GAAqB,SAAS,UAAT,CAAqB,IAArB,EAA2B;AAC9C,YAAS,OAAO,EAAhB;AACA,UAAO,UAAU,MAAV,EAAkB;AACvB,mBAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACzC,eAAQ,SAAR,CAAkB,GAAlB,EAAuB,KAAvB,EAA8B,MAA9B;AACD,MAFD;AAGA,YAAO,MAAP;AACD,IALD;AAMD,EARD;;;;;;;;;;;;;;;;AAwBA,SAAQ,OAAR,GAAkB,gBAAlB,C;;;;;;ACvuCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ca100470a5654be6eafb\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js new file mode 100644 index 0000000..d85088b --- /dev/null +++ b/fetch/dist/js-data-fetch.min.js @@ -0,0 +1,10 @@ +/*! +* js-data-fetch +* @version 3.0.0-beta.3 - Homepage +* @copyright (c) 2014-2016 js-data-http project authors +* @license MIT +* +* @overview HTTP adapter for js-data that uses the fetch API. +*/ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u)(r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return f.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:3,full:"3.0.0-beta.3",major:3,minor:0,patch:0}},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var s=void 0;return s=a.op="beforeUpdate",t.utils.resolve(u[s](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,s=a.op="update",u.dbg(s,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),s=a.op="afterUpdate",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var s=void 0;return s=a.op="beforeUpdateAll",t.utils.resolve(u[s](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,s=a.op="updateAll",u.dbg(s,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),s=a.op="afterUpdateAll",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); +//# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map new file mode 100644 index 0000000..ffc44b7 --- /dev/null +++ b/fetch/dist/js-data-fetch.min.map @@ -0,0 +1 @@ +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/fetch/package.json b/fetch/package.json index 1634988..3844e3f 100644 --- a/fetch/package.json +++ b/fetch/package.json @@ -22,6 +22,6 @@ "fetch" ], "peerDependencies": { - "js-data": "^3.0.0-beta.2" + "js-data": "^3.0.0-beta.3" } } diff --git a/node/.gitignore b/node/.gitignore index 5d5e8fc..e69de29 100644 --- a/node/.gitignore +++ b/node/.gitignore @@ -1,2 +0,0 @@ -dist/*.js -dist/*.map \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js new file mode 100644 index 0000000..0caa9a4 --- /dev/null +++ b/node/dist/js-data-http-node.js @@ -0,0 +1,3003 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("js-data"), require("axios")); + else if(typeof define === 'function' && define.amd) + define(["js-data", "axios"], factory); + else { + var a = typeof exports === 'object' ? factory(require("js-data"), require("axios")) : factory(root["js-data"], root["axios"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var _jsData = __webpack_require__(1); + + var _jsDataAdapter = __webpack_require__(2); + + /* global fetch:true Headers:true Request:true */ + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + + var axios = __webpack_require__(3); + + + var hasFetch = false; + + try { + hasFetch = window && window.fetch; + } catch (e) {} + + function isValidString(value) { + return value != null && value !== ''; + } + function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); + } + function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + } + + function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + _jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!_jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (_jsData.utils.isObject(v)) { + v = _jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var __super__ = _jsDataAdapter.Adapter.prototype; + + var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false + }; + + /** + * HttpAdapter class. + * + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO + */ + function HttpAdapter(opts) { + var self = this; + opts || (opts = {}); + _jsData.utils.fillIn(opts, DEFAULTS); + _jsDataAdapter.Adapter.call(self, opts); + } + + /** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + exports.HttpAdapter = HttpAdapter; + + // Setup prototype inheritance from Adapter + HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } + }); + + Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: _jsDataAdapter.Adapter + }); + + /** + * Alternative to ES6 class syntax for extending `HttpAdapter`. + * + * __ES6__: + * ```javascript + * class MyHttpAdapter extends HttpAdapter { + * deserialize (Model, data, opts) { + * const data = super.deserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * } + * } + * ``` + * + * __ES5__: + * ```javascript + * var instanceProps = { + * // override deserialize + * deserialize: function (Model, data, opts) { + * var Ctor = this.constructor + * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize + * // call the super deserialize + * var data = superDeserialize(Model, data, opts) + * data.foo = 'bar' + * return data + * }, + * say: function () { return 'hi' } + * } + * var classProps = { + * yell: function () { return 'HI' } + * } + * + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() + * adapter.say() // "hi" + * MyHttpAdapter.yell() // "HI" + * ``` + * + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. + */ + HttpAdapter.extend = _jsData.utils.extend; + + _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: _jsDataAdapter.noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: _jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: _jsDataAdapter.noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (_jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = _jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (_jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + _jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(_jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.params)) { + return {}; + } + return _jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (_jsData.utils.isUndefined(opts.suffix)) { + if (_jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = _jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; + } else { + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return _jsData.utils.reject(data); + } + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); + } + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); + }); + }).then(function (response) { + return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return _jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (_jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return _jsData.utils.reject(err); + }, + + + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (_jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (_jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!_jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.sum.call(self, mapper, field, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.update.call(self, mapper, id, props, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + _jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateAll.call(self, mapper, props, query, opts); + }, + + + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateMany.call(self, mapper, records, opts); + } + }); + + /** + * Add an Http actions to a mapper. + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addAction = function addAction(name, opts) { + if (!name || !_jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return _jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (_jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + _jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; + if (_jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + config.method = config.method || 'GET'; + config.mapper = self.name; + _jsData.utils.deepMixIn(config)(_opts); + return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }; + return mapper; + }; + }; + + /** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + exports.addActions = function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + _jsData.utils.forOwn(mapper, function (value, key) { + exports.addAction(key, value)(mapper); + }); + return mapper; + }; + }; + + /** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ + exports.version = { + beta: 3, + full: '3.0.0-beta.3', + major: 3, + minor: 0, + patch: 0 +}; + +/***/ }, +/* 1 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_1__; + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + (function (global, factory) { + true ? factory(exports, __webpack_require__(1)) : + typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : + (factory((global.Adapter = global.Adapter || {}),global.JSData)); + }(this, function (exports,jsData) { 'use strict'; + + var babelHelpers = {}; + babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + babelHelpers.defineProperty = function (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; + }; + + babelHelpers.slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + + babelHelpers; + + /** + * @name module:js-data-adapter.noop + */ + var noop = function noop() { + var self = this; + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = args[args.length - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.noop2 + */ + var noop2 = function noop2() { + var self = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var opts = args[args.length - 2]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + /** + * @name module:js-data-adapter.unique + */ + var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; + }; + + /** + * @name module:js-data-adapter.withoutRelations + */ + var withoutRelations = function withoutRelations(mapper, props) { + return jsData.utils.omit(props, mapper.relationFields || []); + }; + + var DEFAULTS = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, + + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false + }; + + /** + * {@link Adapter} class. + * + * @name module:js-data-adapter.Adapter + * @see Adapter + */ + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ + function Adapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS); + jsData.utils.fillIn(self, opts); + } + + /** + * @name module:js-data-adapter.reserved + */ + var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; + + /** + * {@link Response} class. + * + * @name module:js-data-adapter.Response + * @see Response + */ + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + var self = this; + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + self.data = data; + + jsData.utils.fillIn(self, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + self.op = op; + } + + /** + * Alternative to ES6 class syntax for extending `Adapter`. + * + * @name Adapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `Adapter`. + */ + Adapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. + * + * @name Adapter#dbg + * @method + */ + dbg: function dbg() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this.log.apply(this, ['debug'].concat(args)); + }, + + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._count(mapper, query, opts)); + }).then(function (results) { + var _results = babelHelpers.slicedToArray(results, 2); + + var data = _results[0]; + var result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'create'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = babelHelpers.slicedToArray(results, 2); + + var data = _results2[0]; + var result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = self.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'createMany'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = babelHelpers.slicedToArray(results, 2); + + var data = _results3[0]; + var result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = self.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = babelHelpers.slicedToArray(results, 2); + + var data = _results4[0]; + var result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = self.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = babelHelpers.slicedToArray(results, 2); + + var data = _results5[0]; + var result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = self.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var self = this; + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var _ret = function () { + var record = records; + return { + v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }) + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } else { + var keys = records.map(function (record) { + return self.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return self.findAll(relationDef, { + where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + var record = void 0, + op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._find(mapper, id, opts)); + }).then(function (results) { + var _results6 = babelHelpers.slicedToArray(results, 1); + + var _record = _results6[0]; + + if (!_record) { + return; + } + record = _record; + var tasks = []; + + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = self.loadHasOne(mapper, def, record, __opts); + } else { + task = self.loadHasMany(mapper, def, record, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, record, __opts); + } + if (task) { + tasks.push(task); + } + }); + + return Promise.all(tasks); + }).then(function () { + var response = new Response(record, {}, 'find'); + response.found = record ? 1 : 0; + response = self.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + opts || (opts = {}); + opts.with || (opts.with = []); + + var records = []; + var op = void 0; + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._findAll(mapper, query, opts)); + }).then(function (results) { + var _results7 = babelHelpers.slicedToArray(results, 1); + + var _records = _results7[0]; + + _records || (_records = []); + records = _records; + var tasks = []; + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasMany') { + task = self.loadHasMany(mapper, def, records, __opts); + } else { + task = self.loadHasOne(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + return Promise.all(tasks); + }).then(function () { + var response = new Response(records, {}, 'findAll'); + response.found = records.length; + response = self.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var self = this; + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return self.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var self = this; + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': self.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var _ret2 = function () { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + }); + return { + v: self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }) + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var self = this; + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(def.getRelation(), { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'contains': self.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return self.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); + }, + + + /** + * Logging utility method. Override this method if you want to send log + * messages to something other than the console. + * + * @name Adapter#log + * @method + * @param {string} level Log level. + * @param {...*} values Values to log. + */ + log: function log(level) { + for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + if (level && !args.length) { + args.push(level); + level = 'debug'; + } + if (level === 'debug' && !this.debug) { + return; + } + var prefix = level.toUpperCase() + ': (Adapter)'; + if (console[level]) { + var _console; + + (_console = console)[level].apply(_console, [prefix].concat(args)); + } else { + var _console2; + + (_console2 = console).log.apply(_console2, [prefix].concat(args)); + } + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + self.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results8 = babelHelpers.slicedToArray(results, 2); + + var data = _results8[0]; + var result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'update'; + self.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(self._update(mapper, id, props, opts)); + }).then(function (results) { + var _results9 = babelHelpers.slicedToArray(results, 2); + + var data = _results9[0]; + var result = _results9[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = self.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + op = opts.op = 'updateAll'; + self.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results10 = babelHelpers.slicedToArray(results, 2); + + var data = _results10[0]; + var result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = jsData.utils.isUndefined(_records) ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results11 = babelHelpers.slicedToArray(results, 2); + + var data = _results11[0]; + var result = _results11[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + } + }); + + exports.noop = noop; + exports.noop2 = noop2; + exports.unique = unique; + exports.withoutRelations = withoutRelations; + exports.Adapter = Adapter; + exports.reserved = reserved; + exports.Response = Response; + + })); + //# sourceMappingURL=js-data-adapter.js.map + +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_3__; + +/***/ } +/******/ ]) +}); +; +//# sourceMappingURL=js-data-http-node.js.map \ No newline at end of file diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map new file mode 100644 index 0000000..8e459d4 --- /dev/null +++ b/node/dist/js-data-http-node.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 2b1cc971a6e745638bc9","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;ACTA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFA,KAAM,QAAQ,oBAAQ,CAAR,CAAd;;;AAQA,KAAI,WAAW,KAAf;;AAEA,KAAI;AACF,cAAW,UAAU,OAAO,KAA5B;AACD,EAFD,CAEE,OAAO,CAAP,EAAU,CAAE;;AAEd,UAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,UAAQ,SAAS,IAAT,IAAiB,UAAU,EAAnC;AACD;AACD,UAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,iBAAc,YAAY,EAA1B;AACA,UAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;AACD;AACD,UAAS,QAAT,GAA4B;AAAA,qCAAN,IAAM;AAAN,SAAM;AAAA;;AAC1B,OAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;AACA,UAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;AACD;;AAED,UAAS,MAAT,CAAiB,GAAjB,EAAsB;AACpB,UAAO,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;AAQD;;AAED,UAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,OAAI,CAAC,MAAL,EAAa;AACX,YAAO,GAAP;AACD;;AAED,OAAM,QAAQ,EAAd;;AAEA,iBAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;AACvC,SAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;AAC9C;AACD;AACD,SAAI,CAAC,cAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;AACvB,aAAM,CAAC,GAAD,CAAN;AACD;;AAED,SAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,WAAI,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAAhC,EAAiD;AAC/C,aAAI,EAAE,WAAF,EAAJ;AACD,QAFD,MAEO,IAAI,cAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;AAC5B,aAAI,cAAM,MAAN,CAAa,CAAb,CAAJ;AACD;AACD,aAAM,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;AACD,MAPD;AAQD,IAhBD;;AAkBA,OAAI,MAAM,MAAN,GAAe,CAAnB,EAAsB;AACpB,YAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;AACD;;AAED,UAAO,GAAP;AACD;;AAED,KAAM,YAAY,uBAAQ,SAA1B;;AAEA,KAAM,WAAW;;;;;;AAMf,aAAU,EANK;;;;;;;AAaf,uBAAoB,KAbL;;;;;;AAmBf,SAAM,KAnBS;;;;;;AAyBf,eAAY,EAzBG;;;;;;AA+Bf,WAAQ,EA/BO;;;;;;;AAsCf,aAAU;AAtCK,EAAjB;;;;;;;;;;;;;;;;AAuDA,UAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,OAAM,OAAO,IAAb;AACA,YAAS,OAAO,EAAhB;AACA,iBAAM,MAAN,CAAa,IAAb,EAAmB,QAAnB;AACA,0BAAQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;AACD;;;;;;AAMD,SAAQ,WAAR,GAAsB,WAAtB;;;AAGA,aAAY,SAAZ,GAAwB,OAAO,MAAP,CAAc,uBAAQ,SAAtB,EAAiC;AACvD,gBAAa;AACX,YAAO,WADI;AAEX,iBAAY,KAFD;AAGX,eAAU,IAHC;AAIX,mBAAc;AAJH;AAD0C,EAAjC,CAAxB;;AASA,QAAO,cAAP,CAAsB,WAAtB,EAAmC,WAAnC,EAAgD;AAC9C,iBAAc,IADgC;AAE9C;AAF8C,EAAhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,aAAY,MAAZ,GAAqB,cAAM,MAA3B;;AAEA,eAAM,sBAAN,CAA6B,YAAY,SAAzC,EAAoD;;;;;;;;;AASlD,iCATkD;;;;;;;;;;AAmBlD,iCAnBkD;;;;;;;;;AA4BlD,kCA5BkD;;;;;;;;;;;AAuClD,kCAvCkD;;;;;;;;;;;AAkDlD,iCAlDkD;;;;;;;;;AA2DlD,iCA3DkD;;;;;;;;;AAoElD,iCApEkD;;;;;;;;AA4ElD,kCA5EkD;;;;;;;;;;AAsFlD,kCAtFkD;;;;;;;;;;AAgGlD,iCAhGkD;;AAkGlD,SAlGkD,kBAkG1C,MAlG0C,EAkGlC,KAlGkC,EAkG3B,IAlG2B,EAkGrB;AAC3B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1GiD;AA4GlD,UA5GkD,mBA4GzC,MA5GyC,EA4GjC,KA5GiC,EA4G1B,IA5G0B,EA4GpB;AAC5B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IArHiD;AAuHlD,cAvHkD,uBAuHrC,MAvHqC,EAuH7B,KAvH6B,EAuHtB,IAvHsB,EAuHhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAhIiD;AAkIlD,WAlIkD,oBAkIxC,MAlIwC,EAkIhC,EAlIgC,EAkI5B,IAlI4B,EAkItB;AAC1B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1IiD;AA4IlD,cA5IkD,uBA4IrC,MA5IqC,EA4I7B,KA5I6B,EA4ItB,IA5IsB,EA4IhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IApJiD;AAsJlD,OAtJkD,gBAsJ5C,MAtJ4C,EAsJpC,IAtJoC,EAsJ9B,QAtJ8B,EAsJpB;AAC5B,YAAO,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;AACD,IAxJiD;AA0JlD,QA1JkD,iBA0J3C,MA1J2C,EA0JnC,EA1JmC,EA0J/B,IA1J+B,EA0JzB;AACvB,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAlKiD;AAoKlD,WApKkD,oBAoKxC,MApKwC,EAoKhC,KApKgC,EAoKzB,IApKyB,EAoKnB;AAC7B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA5KiD;AA8KlD,OA9KkD,gBA8K5C,MA9K4C,EA8KpC,KA9KoC,EA8K7B,KA9K6B,EA8KtB,IA9KsB,EA8KhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAtLiD;AAwLlD,UAxLkD,mBAwLzC,MAxLyC,EAwLjC,EAxLiC,EAwL7B,KAxL6B,EAwLtB,IAxLsB,EAwLhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAjMiD;AAmMlD,aAnMkD,sBAmMtC,MAnMsC,EAmM9B,KAnM8B,EAmMvB,KAnMuB,EAmMhB,IAnMgB,EAmMV;AACtC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IA5MiD;AA8MlD,cA9MkD,uBA8MrC,MA9MqC,EA8M7B,OA9M6B,EA8MpB,IA9MoB,EA8Md;AAClC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAvNiD;;;;;;;;;;;;;;;AAqOlD,QArOkD,iBAqO3C,MArO2C,EAqOnC,KArOmC,EAqO5B,IArO4B,EAqOtB;AAC1B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,KAAZ,GAAoB,IAApB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,KAAV,CAAgB,IAAhB,CAAqB,IAArB,EAA2B,MAA3B,EAAmC,KAAnC,EAA0C,IAA1C,CAAP;AACD,IAhPiD;;;;;;;;;;;;;;;AA8PlD,SA9PkD,kBA8P1C,MA9P0C,EA8PlC,KA9PkC,EA8P3B,IA9P2B,EA8PrB;AAC3B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,KAApC,EAA2C,IAA3C,CAAP;AACD,IAtQiD;;;;;;;;;;;;;;;AAoRlD,aApRkD,sBAoRtC,MApRsC,EAoR9B,KApR8B,EAoRvB,IApRuB,EAoRjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA5RiD;;;;;;;;;;;;;;AAySlD,MAzSkD,eAyS7C,GAzS6C,EAySxC,MAzSwC,EAyShC,IAzSgC,EAyS1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjUiD;;;;;;;;;;;;;;AA8UlD,cA9UkD,uBA8UrC,MA9UqC,EA8U7B,QA9U6B,EA8UnB,IA9UmB,EA8Ub;AACnC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;AACtC,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;AACxC,cAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;AACD;AACD,SAAI,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;AAC/C,cAAO,SAAS,IAAhB;AACD;AACD,YAAO,QAAP;AACD,IA1ViD;;;;;;;;;;;;;;;AAwWlD,UAxWkD,mBAwWzC,MAxWyC,EAwWjC,EAxWiC,EAwW7B,IAxW6B,EAwWvB;AACzB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,EAArC,EAAyC,IAAzC,CAAP;AACD,IAhXiD;;;;;;;;;;;;;;;AA8XlD,aA9XkD,sBA8XtC,MA9XsC,EA8X9B,KA9X8B,EA8XvB,IA9XuB,EA8XjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAxYiD;;;;;;;;;;AAiZlD,QAjZkD,mBAiZlC;AACd,SAAI,OAAJ,EAAa;AAAA;;AACX,4BAAQ,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;AACD;AACF,IArZiD;;;;;;;;;;;;;;;;AAoalD,QApakD;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,eAoa3C,MApa2C,EAoanC,IApamC,EAoa7B;AACnB,SAAM,gBAAgB;AACpB,eAAQ,OAAO,MADK;;AAGpB,gBAAS,IAAI,OAAJ,CAAY,OAAO,OAAnB;AAHW,MAAtB;;AAMA,SAAI,OAAO,IAAX,EAAiB;AACf,qBAAc,IAAd,GAAqB,cAAM,MAAN,CAAa,OAAO,IAApB,CAArB;AACD;;AAED,YAAO,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAZ,EAAiD,aAAjD,CAAN,EAAuE,IAAvE,CAA4E,UAAU,QAAV,EAAoB;AACrG,gBAAS,MAAT,GAAkB;AAChB,iBAAQ,OAAO,MADC;AAEhB,cAAK,OAAO;AAFI,QAAlB;AAIA,cAAO,SAAS,IAAT,GAAgB,IAAhB,CAAqB,UAAU,IAAV,EAAgB;AAC1C,kBAAS,IAAT,GAAgB,IAAhB;AACA,gBAAO,QAAP;AACD,QAHM,CAAP;AAID,MATM,CAAP;AAUD,IAzbiD;;;;;;;;;;;;;;;AAuclD,OAvckD,gBAuc5C,MAvc4C,EAucpC,EAvcoC,EAuchC,IAvcgC,EAuc1B;AACtB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,IAAV,CAAe,IAAf,CAAoB,IAApB,EAA0B,MAA1B,EAAkC,EAAlC,EAAsC,IAAtC,CAAP;AACD,IA/ciD;;;;;;;;;;;;;;;AA6dlD,UA7dkD,mBA6dzC,MA7dyC,EA6djC,KA7diC,EA6d1B,IA7d0B,EA6dpB;AAC5B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,KAArC,EAA4C,IAA5C,CAAP;AACD,IAveiD;;;;;;;;;;;;;AAmflD,MAnfkD,eAmf7C,GAnf6C,EAmfxC,MAnfwC,EAmfhC,IAnfgC,EAmf1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IA3gBiD;;;;;;;;;;;AAqhBlD,cArhBkD,uBAqhBrC,MArhBqC,EAqhB7B,EArhB6B,EAqhBzB,IArhByB,EAqhBnB;AAC7B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,cAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;AACA,SAAM,eAAe,OAAO,YAAP,IAAuB,EAA5C;AACA,SAAI,WAAW,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;AAEA,kBAAa,OAAb,CAAqB,UAAU,GAAV,EAAe;AAClC,WAAI,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;AAC3C;AACD;AACD,WAAI,aAAJ;AACA,WAAM,YAAY,IAAI,UAAtB;AACA,WAAM,YAAY,IAAI,WAAJ,EAAlB;AACA,WAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;AAEA,WAAI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;AAClD,aAAI,aAAa,KAAjB,EAAwB;AACtB,kBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;AACD;AACD,gBAAO,KAAP;AACD,QALD,MAKO;AACL,gBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;;AAEA,aAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,kBAAO,EAAP;AACD;;AAED,aAAI,IAAJ,EAAU;AACR,sBAAW,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0B,cAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;AACD;;AAED,aAAI,QAAJ,EAAc;AAAA;AACZ,oBAAO,KAAK,QAAZ;AACA,iBAAM,QAAQ,EAAd;AACA,2BAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,qBAAM,GAAN,IAAa,KAAb;AACD,cAFD;AAGA,2BAAM,CAAN,CAAQ,KAAR,EAAe,SAAf;AACA,wBAAW,SAAS,KAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;AACA;AAAA,kBAAO;AAAP;AARY;;AAAA;AASb;AACF;AACF,MApCD;;AAsCA,YAAO,QAAP;AACD,IAnkBiD;;;;;;;;;;;AA6kBlD,UA7kBkD,mBA6kBzC,MA7kByC,EA6kBjC,MA7kBiC,EA6kBzB,EA7kByB,EA6kBrB,IA7kBqB,EA6kBf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,OAAO,CACX,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,KAAK,QAA1C,GAAqD,OAAO,QAAhG,GAA4G,KAAK,QADtG,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0B,cAAM,QAAN,CAAe,EAAf,KAAsB,cAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;AAIA,SAAI,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;AACpE,YAAK,IAAL,CAAU,EAAV;AACD;AACD,YAAO,SAAS,KAAT,gBAAsB,IAAtB,CAAP;AACD,IAxlBiD;AA0lBlD,YA1lBkD,qBA0lBvC,IA1lBuC,EA0lBjC;AACf,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,cAAO,EAAP;AACD;AACD,YAAO,cAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;AACD,IAhmBiD;AAkmBlD,YAlmBkD,qBAkmBvC,MAlmBuC,EAkmB/B,IAlmB+B,EAkmBzB;AACvB,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,WAAI,cAAM,WAAN,CAAkB,OAAO,MAAzB,CAAJ,EAAsC;AACpC,gBAAO,KAAK,MAAZ;AACD;AACD,cAAO,OAAO,MAAd;AACD;AACD,YAAO,KAAK,MAAZ;AACD,IA3mBiD;;;;;;;;;;;;AAsnBlD,OAtnBkD,gBAsnB5C,MAtnB4C,EAsnBpC,IAtnBoC,EAsnB9B;AAClB,SAAM,OAAO,IAAb;AACA,SAAM,QAAQ,IAAI,IAAJ,EAAd;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,UAAU,OAAO,IAAvB;AACA,SAAM,QAAQ,OAAO,KAArB;AACA,SAAM,UAAU,OAAO,OAAvB;AACA,cAAS,cAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;AACA,cAAS,cAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;AACA,YAAO,IAAP,GAAc,OAAd;AACA,YAAO,KAAP,GAAe,KAAf;AACA,YAAO,OAAP,GAAiB,OAAjB;AACA,SAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;AACxE,cAAO,GAAP,IAAc,GAAd;AACD;AACD,YAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;AACA,SAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;AACA,SAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;AAC7E,cAAO,GAAP,IAAc,MAAd;AACD;;AAED,cAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,WAAM,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;AACA,WAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;AAC3C,aAAI,KAAK,GAAT,EAAc;AACZ,gBAAK,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB;AACD;AACD,gBAAO,IAAP;AACD,QALD,MAKO;AACL,aAAI,KAAK,KAAT,EAAgB;AACd,gBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;AACD;AACD,gBAAO,cAAM,MAAN,CAAa,IAAb,CAAP;AACD;AACF;;AAED,SAAI,CAAC,KAAK,IAAV,EAAgB;AACd,aAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN;AACD;;AAED,YAAO,cAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EAA6C,IAA7C,CAAkD,UAAU,OAAV,EAAmB;AAC1E,gBAAS,WAAW,MAApB;AACA,WAAI,aAAa,KAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,KAAK,IAArD,CAAJ,EAAgE;AAC9D,gBAAO,KAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;AACD;AACD,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAuD,UAAU,GAAV,EAAe;AAC3E,gBAAO,KAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAP;AACD,QAFM,CAAP;AAGD,MARM,EAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,cAAM,OAAN,CAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EAAsD,IAAtD,CAA2D,UAAU,SAAV,EAAqB;AACrF,gBAAO,aAAa,QAApB;AACD,QAFM,CAAP;AAGD,MAZM,CAAP;AAaD,IA3qBiD;;;;;;;;;;;;;;AAwrBlD,OAxrBkD,gBAwrB5C,GAxrB4C,EAwrBvC,IAxrBuC,EAwrBjC,MAxrBiC,EAwrBzB,IAxrByB,EAwrBnB;AAC7B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,YAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,MAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,WAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjtBiD;;;;;;;;;;;;;;AA8tBlD,MA9tBkD,eA8tB7C,GA9tB6C,EA8tBxC,IA9tBwC,EA8tBlC,MA9tBkC,EA8tB1B,IA9tB0B,EA8tBpB;AAC5B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAvvBiD;;;;;;;;;;;;;AAmwBlD,iBAnwBkD,0BAmwBlC,MAnwBkC,EAmwB1B,MAnwB0B,EAmwBlB,IAnwBkB,EAmwBZ;AACpC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACzC,cAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;AAC3C,cAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;AACD;AACD,YAAO,MAAP;AACD,IA5wBiD;;;;;;;;;;;;;;;;AA2xBlD,gBA3xBkD,yBA2xBnC,GA3xBmC,EA2xB9B,MA3xB8B,EA2xBtB,IA3xBsB,EA2xBhB;AAChC,YAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AACD,IA7xBiD;;;;;;;;;;;;;AAyyBlD,YAzyBkD,qBAyyBvC,MAzyBuC,EAyyB/B,IAzyB+B,EAyyBzB,IAzyByB,EAyyBnB;AAC7B,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AACpC,cAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;AACtC,cAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;AACD;AACD,YAAO,IAAP;AACD,IAlzBiD;;;;;;;;;;;;;;;;AAi0BlD,MAj0BkD,eAi0B7C,MAj0B6C,EAi0BrC,KAj0BqC,EAi0B9B,KAj0B8B,EAi0BvB,IAj0BuB,EAi0BjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,SAAI,CAAC,cAAM,KAAN,CAAY,QAAZ,CAAqB,KAArB,CAAL,EAAkC;AAChC,aAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD;AACD,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,GAAV,CAAc,IAAd,CAAmB,IAAnB,EAAyB,MAAzB,EAAiC,KAAjC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA/0BiD;;;;;;;;;;;;;;AA41BlD,SA51BkD,kBA41B1C,MA51B0C,EA41BlC,EA51BkC,EA41B9B,KA51B8B,EA41BvB,IA51BuB,EA41BjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,EAApC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAp2BiD;;;;;;;;;;;;;;AAi3BlD,YAj3BkD,qBAi3BvC,MAj3BuC,EAi3B/B,KAj3B+B,EAi3BxB,KAj3BwB,EAi3BjB,IAj3BiB,EAi3BX;AACrC,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,SAAV,CAAoB,IAApB,CAAyB,IAAzB,EAA+B,MAA/B,EAAuC,KAAvC,EAA8C,KAA9C,EAAqD,IAArD,CAAP;AACD,IA33BiD;;;;;;;;;;;;;;;;;;;;AA84BlD,aA94BkD,sBA84BtC,MA94BsC,EA84B9B,OA94B8B,EA84BrB,IA94BqB,EA84Bf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,OAAxC,EAAiD,IAAjD,CAAP;AACD;AAt5BiD,EAApD;;;;;;;;;;;;;;;;;AAw6BA,SAAQ,SAAR,GAAoB,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;AAClD,OAAI,CAAC,IAAD,IAAS,CAAC,cAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;AAClC,WAAM,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;AACD;AACD,UAAO,UAAU,MAAV,EAAkB;AACvB,SAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,aAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;AACD;AACD,UAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,cAAO,MAAP;AAAe,MAAlE;AACA,UAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,cAAO,QAAP;AAAiB,MAAxE;AACA,UAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,cAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AAA0B,MAAtF;AACA,YAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAClC,WAAM,OAAO,IAAb;AACA,WAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,iBAAQ,EAAR;AACD;AACD,eAAQ,SAAS,EAAjB;AACA,WAAI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAArB,IAAuC,MAAvD,CAAd;AACA,WAAI,SAAS,EAAb;AACA,qBAAM,MAAN,CAAa,MAAb,EAAqB,IAArB;AACA,WAAI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAhD,EAA0D;AACxD,eAAM,QAAN,GAAiB,OAAO,QAAxB;AACD;AACD,WAAI,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;AAC3C,gBAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;AACD,QAFD,MAEO;AACL,aAAI,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0B,cAAM,MAAN,CAAa,EAAb,IAAmB,EAAnB,GAAwB,IAAlD,EAAwD,KAAxD,CAFS,CAAX;AAIA,aAAI,cAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;AACpB,gBAAK,IAAL,CAAU,EAAV;AACD;AACD,cAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;AACA,gBAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;AACD;AACD,cAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;AACA,cAAO,MAAP,GAAgB,KAAK,IAArB;AACA,qBAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;AACA,cAAO,cAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OADvB,EAEJ,IAFI,CAEC,UAAU,MAAV,EAAkB;AAAE,gBAAO,QAAQ,IAAR,CAAa,MAAb,CAAP;AAA6B,QAFlD,EAGJ,IAHI,CAGC,UAAU,IAAV,EAAgB;AACpB,aAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,gBAAK,MAAL,CAAY,MAAZ,GAAqB,KAAK,IAA1B;AACD;AACD,gBAAO,IAAP;AACD,QARI,EASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QATxB,EASkC,MAAM,aAAN,IAAuB,KAAK,aAT9D,CAAP;AAUD,MAtCD;AAuCA,YAAO,MAAP;AACD,IA/CD;AAgDD,EApDD;;;;;;;;;;;;;AAiEA,SAAQ,UAAR,GAAqB,SAAS,UAAT,CAAqB,IAArB,EAA2B;AAC9C,YAAS,OAAO,EAAhB;AACA,UAAO,UAAU,MAAV,EAAkB;AACvB,mBAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACzC,eAAQ,SAAR,CAAkB,GAAlB,EAAuB,KAAvB,EAA8B,MAA9B;AACD,MAFD;AAGA,YAAO,MAAP;AACD,IALD;AAMD,EARD;;;;;;;;;;;;;;;;AAwBA,SAAQ,OAAR,GAAkB,gBAAlB,C;;;;;;ACvuCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2b1cc971a6e745638bc9\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/node/package.json b/node/package.json index 7126302..a151667 100644 --- a/node/package.json +++ b/node/package.json @@ -22,10 +22,10 @@ "node.js" ], "dependencies": { - "js-data-adapter": "~0.3.0" + "js-data-adapter": "~0.5.0" }, "peerDependencies": { "axios": "^0.11.0", - "js-data": "^3.0.0-beta.2" + "js-data": "^3.0.0-beta.3" } } From 0c60429e98e7bd08ec7301dd9bcb979d709a2a77 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Sun, 1 May 2016 22:54:53 -0700 Subject: [PATCH 02/10] 3.0.0-beta.4 --- dist/js-data-http.js | 124 +++++++++-------------------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 124 +++++++++-------------------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 122 +++++++++------------------- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 123 insertions(+), 267 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index f49a69f..5a0d5f3 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-beta.3 - Homepage +* @version 3.0.0-beta.4 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -72,32 +72,6 @@ return /******/ (function(modules) { // webpackBootstrap /* global fetch:true Headers:true Request:true */ - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` - * - * @module js-data-http - */ - var axios = __webpack_require__(3); @@ -247,40 +221,16 @@ return /******/ (function(modules) { // webpackBootstrap /** * Alternative to ES6 class syntax for extending `HttpAdapter`. * - * __ES6__: - * ```javascript - * class MyHttpAdapter extends HttpAdapter { - * deserialize (Model, data, opts) { - * const data = super.deserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * } - * } - * ``` + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() * - * __ES5__: - * ```javascript - * var instanceProps = { - * // override deserialize - * deserialize: function (Model, data, opts) { - * var Ctor = this.constructor - * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize - * // call the super deserialize - * var data = superDeserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * }, - * say: function () { return 'hi' } - * } - * var classProps = { - * yell: function () { return 'HI' } - * } + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} * * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) * var adapter = new MyHttpAdapter() - * adapter.say() // "hi" - * MyHttpAdapter.yell() // "HI" - * ``` * * @name HttpAdapter.extend * @method @@ -1307,12 +1257,39 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 3, - full: '3.0.0-beta.3', + beta: 4, + full: '3.0.0-beta.4', major: 3, minor: 0, patch: 0 }; + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + exports.default = HttpAdapter; /***/ }, /* 1 */ @@ -1392,9 +1369,6 @@ return /******/ (function(modules) { // webpackBootstrap babelHelpers; - /** - * @name module:js-data-adapter.noop - */ var noop = function noop() { var self = this; @@ -1407,9 +1381,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.noop2 - */ var noop2 = function noop2() { var self = this; @@ -1422,9 +1393,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.unique - */ var unique = function unique(array) { var seen = {}; var final = []; @@ -1438,9 +1406,6 @@ return /******/ (function(modules) { // webpackBootstrap return final; }; - /** - * @name module:js-data-adapter.withoutRelations - */ var withoutRelations = function withoutRelations(mapper, props) { return jsData.utils.omit(props, mapper.relationFields || []); }; @@ -1465,12 +1430,6 @@ return /******/ (function(modules) { // webpackBootstrap raw: false }; - /** - * {@link Adapter} class. - * - * @name module:js-data-adapter.Adapter - * @see Adapter - */ /** * Abstract class meant to be extended by adapters. * @@ -1488,17 +1447,8 @@ return /******/ (function(modules) { // webpackBootstrap jsData.utils.fillIn(self, opts); } - /** - * @name module:js-data-adapter.reserved - */ var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - /** - * {@link Response} class. - * - * @name module:js-data-adapter.Response - * @see Response - */ /** * Response object used when `raw` is `true`. May contain other fields in * addition to `data`. @@ -2850,6 +2800,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'update'; self.dbg(op, mapper, id, props, opts); return jsData.utils.resolve(self._update(mapper, id, props, opts)); @@ -2906,6 +2857,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'updateAll'; self.dbg(op, mapper, props, query, opts); return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 67f525a..089f27a 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap f9314119ebc2ecd766ea","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9314119ebc2ecd766ea\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 62be9016f785db9870f0","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 62be9016f785db9870f0\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index bff7b3b..1fc78f3 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.3 - Homepage +* @version 3.0.0-beta.4 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data")):"function"==typeof define&&define.amd?define(["js-data"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data")):e.JSDataHttp=t(e.JSData)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(r).join(t)}function i(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a)(r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return l.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:3,full:"3.0.0-beta.3",major:3,minor:0,patch:0}},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var s=void 0;return s=u.op="beforeUpdate",t.utils.resolve(a[s](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,s=u.op="update",a.dbg(s,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),s=u.op="afterUpdate",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var s=void 0;return s=u.op="beforeUpdateAll",t.utils.resolve(a[s](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,s=u.op="updateAll",a.dbg(s,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),s=u.op="afterUpdateAll",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;n>8-a%1*8)){if(r=i.charCodeAt(a+=.75),r>255)throw new n;t=t<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){"use strict";e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){"use strict";var r=n(6);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,u){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),u===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(6);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;rn;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a)(r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return l.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:4,full:"3.0.0-beta.4",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdate",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=s(e,i),f=u.op="update",a.dbg(f,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),f=u.op="afterUpdate",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdateAll",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),f=u.op="updateAll",a.dbg(f,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),f=u.op="afterUpdateAll",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;n>8-a%1*8)){if(r=i.charCodeAt(a+=.75),r>255)throw new n;t=t<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){"use strict";e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){"use strict";var r=n(6);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,u){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),u===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(6);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r +* @version 3.0.0-beta.4 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -72,32 +72,6 @@ return /******/ (function(modules) { // webpackBootstrap /* global fetch:true Headers:true Request:true */ - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` - * - * @module js-data-http - */ - var axios = __webpack_require__(3); @@ -247,40 +221,16 @@ return /******/ (function(modules) { // webpackBootstrap /** * Alternative to ES6 class syntax for extending `HttpAdapter`. * - * __ES6__: - * ```javascript - * class MyHttpAdapter extends HttpAdapter { - * deserialize (Model, data, opts) { - * const data = super.deserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * } - * } - * ``` + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() * - * __ES5__: - * ```javascript - * var instanceProps = { - * // override deserialize - * deserialize: function (Model, data, opts) { - * var Ctor = this.constructor - * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize - * // call the super deserialize - * var data = superDeserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * }, - * say: function () { return 'hi' } - * } - * var classProps = { - * yell: function () { return 'HI' } - * } + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} * * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) * var adapter = new MyHttpAdapter() - * adapter.say() // "hi" - * MyHttpAdapter.yell() // "HI" - * ``` * * @name HttpAdapter.extend * @method @@ -1307,12 +1257,39 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 3, - full: '3.0.0-beta.3', + beta: 4, + full: '3.0.0-beta.4', major: 3, minor: 0, patch: 0 }; + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + exports.default = HttpAdapter; /***/ }, /* 1 */ @@ -1392,9 +1369,6 @@ return /******/ (function(modules) { // webpackBootstrap babelHelpers; - /** - * @name module:js-data-adapter.noop - */ var noop = function noop() { var self = this; @@ -1407,9 +1381,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.noop2 - */ var noop2 = function noop2() { var self = this; @@ -1422,9 +1393,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.unique - */ var unique = function unique(array) { var seen = {}; var final = []; @@ -1438,9 +1406,6 @@ return /******/ (function(modules) { // webpackBootstrap return final; }; - /** - * @name module:js-data-adapter.withoutRelations - */ var withoutRelations = function withoutRelations(mapper, props) { return jsData.utils.omit(props, mapper.relationFields || []); }; @@ -1465,12 +1430,6 @@ return /******/ (function(modules) { // webpackBootstrap raw: false }; - /** - * {@link Adapter} class. - * - * @name module:js-data-adapter.Adapter - * @see Adapter - */ /** * Abstract class meant to be extended by adapters. * @@ -1488,17 +1447,8 @@ return /******/ (function(modules) { // webpackBootstrap jsData.utils.fillIn(self, opts); } - /** - * @name module:js-data-adapter.reserved - */ var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - /** - * {@link Response} class. - * - * @name module:js-data-adapter.Response - * @see Response - */ /** * Response object used when `raw` is `true`. May contain other fields in * addition to `data`. @@ -2850,6 +2800,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'update'; self.dbg(op, mapper, id, props, opts); return jsData.utils.resolve(self._update(mapper, id, props, opts)); @@ -2906,6 +2857,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'updateAll'; self.dbg(op, mapper, props, query, opts); return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 644f281..77aba75 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap ca100470a5654be6eafb","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"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AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ca100470a5654be6eafb\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 387d4ab6abb4878de718","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 387d4ab6abb4878de718\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index d85088b..6dae1bf 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.3 - Homepage +* @version 3.0.0-beta.4 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u)(r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return f.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:3,full:"3.0.0-beta.3",major:3,minor:0,patch:0}},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var s=void 0;return s=a.op="beforeUpdate",t.utils.resolve(u[s](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,s=a.op="update",u.dbg(s,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),s=a.op="afterUpdate",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var s=void 0;return s=a.op="beforeUpdateAll",t.utils.resolve(u[s](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,s=a.op="updateAll",u.dbg(s,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),s=a.op="afterUpdateAll",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u)(r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return f.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:4,full:"3.0.0-beta.4",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdate",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,o=s(e,o),l=a.op="update",u.dbg(l,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),l=a.op="afterUpdate",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdateAll",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),l=a.op="updateAll",u.dbg(l,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),l=a.op="afterUpdateAll",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index ffc44b7..b039e72 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","default","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 0caa9a4..b2c0f59 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -64,32 +64,6 @@ return /******/ (function(modules) { // webpackBootstrap /* global fetch:true Headers:true Request:true */ - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` - * - * @module js-data-http - */ - var axios = __webpack_require__(3); @@ -239,40 +213,16 @@ return /******/ (function(modules) { // webpackBootstrap /** * Alternative to ES6 class syntax for extending `HttpAdapter`. * - * __ES6__: - * ```javascript - * class MyHttpAdapter extends HttpAdapter { - * deserialize (Model, data, opts) { - * const data = super.deserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * } - * } - * ``` + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() * - * __ES5__: - * ```javascript - * var instanceProps = { - * // override deserialize - * deserialize: function (Model, data, opts) { - * var Ctor = this.constructor - * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize - * // call the super deserialize - * var data = superDeserialize(Model, data, opts) - * data.foo = 'bar' - * return data - * }, - * say: function () { return 'hi' } - * } - * var classProps = { - * yell: function () { return 'HI' } - * } + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} * * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) * var adapter = new MyHttpAdapter() - * adapter.say() // "hi" - * MyHttpAdapter.yell() // "HI" - * ``` * * @name HttpAdapter.extend * @method @@ -1299,12 +1249,39 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 3, - full: '3.0.0-beta.3', + beta: 4, + full: '3.0.0-beta.4', major: 3, minor: 0, patch: 0 }; + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * __Script tag__: + * ```javascript + * window.HttpAdapter + * ``` + * __CommonJS__: + * ```javascript + * var HttpAdapter = require('js-data-http') + * ``` + * __ES6 Modules__: + * ```javascript + * import HttpAdapter from 'js-data-http' + * ``` + * __AMD__: + * ```javascript + * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) + * ``` + * + * @module js-data-http + */ + exports.default = HttpAdapter; /***/ }, /* 1 */ @@ -1384,9 +1361,6 @@ return /******/ (function(modules) { // webpackBootstrap babelHelpers; - /** - * @name module:js-data-adapter.noop - */ var noop = function noop() { var self = this; @@ -1399,9 +1373,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.noop2 - */ var noop2 = function noop2() { var self = this; @@ -1414,9 +1385,6 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(); }; - /** - * @name module:js-data-adapter.unique - */ var unique = function unique(array) { var seen = {}; var final = []; @@ -1430,9 +1398,6 @@ return /******/ (function(modules) { // webpackBootstrap return final; }; - /** - * @name module:js-data-adapter.withoutRelations - */ var withoutRelations = function withoutRelations(mapper, props) { return jsData.utils.omit(props, mapper.relationFields || []); }; @@ -1457,12 +1422,6 @@ return /******/ (function(modules) { // webpackBootstrap raw: false }; - /** - * {@link Adapter} class. - * - * @name module:js-data-adapter.Adapter - * @see Adapter - */ /** * Abstract class meant to be extended by adapters. * @@ -1480,17 +1439,8 @@ return /******/ (function(modules) { // webpackBootstrap jsData.utils.fillIn(self, opts); } - /** - * @name module:js-data-adapter.reserved - */ var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - /** - * {@link Response} class. - * - * @name module:js-data-adapter.Response - * @see Response - */ /** * Response object used when `raw` is `true`. May contain other fields in * addition to `data`. @@ -2842,6 +2792,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'update'; self.dbg(op, mapper, id, props, opts); return jsData.utils.resolve(self._update(mapper, id, props, opts)); @@ -2898,6 +2849,7 @@ return /******/ (function(modules) { // webpackBootstrap return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); op = opts.op = 'updateAll'; self.dbg(op, mapper, props, query, opts); return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index 8e459d4..bc19b6b 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 2b1cc971a6e745638bc9","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"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AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA,OAAM,cAAc;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;ACxoDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2b1cc971a6e745638bc9\n **/","/* global fetch:true Headers:true Request:true */\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * __ES6__:\n * ```javascript\n * class MyHttpAdapter extends HttpAdapter {\n * deserialize (Model, data, opts) {\n * const data = super.deserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * }\n * }\n * ```\n *\n * __ES5__:\n * ```javascript\n * var instanceProps = {\n * // override deserialize\n * deserialize: function (Model, data, opts) {\n * var Ctor = this.constructor\n * var superDeserialize = (Ctor.__super__ || Object.getPrototypeOf(Ctor)).deserialize\n * // call the super deserialize\n * var data = superDeserialize(Model, data, opts)\n * data.foo = 'bar'\n * return data\n * },\n * say: function () { return 'hi' }\n * }\n * var classProps = {\n * yell: function () { return 'HI' }\n * }\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n * adapter.say() // \"hi\"\n * MyHttpAdapter.yell() // \"HI\"\n * ```\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n /**\n * @name module:js-data-adapter.noop\n */\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.noop2\n */\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n /**\n * @name module:js-data-adapter.unique\n */\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n /**\n * @name module:js-data-adapter.withoutRelations\n */\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * {@link Adapter} class.\n *\n * @name module:js-data-adapter.Adapter\n * @see Adapter\n */\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n /**\n * @name module:js-data-adapter.reserved\n */\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * {@link Response} class.\n *\n * @name module:js-data-adapter.Response\n * @see Response\n */\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 13c03016b2804214fca6","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 13c03016b2804214fca6\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file From fabe215551442ba4c478bda2458833053649b29c Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Mon, 2 May 2016 09:28:11 -0700 Subject: [PATCH 03/10] 3.0.0-beta.5 --- dist/js-data-http.js | 103 +++++++++++++++++++++++------ dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 4 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 103 +++++++++++++++++++++++------ fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 101 ++++++++++++++++++++++------ node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 254 insertions(+), 71 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 5a0d5f3..8647eea 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-beta.4 - Homepage +* @version 3.0.0-beta.5 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -1154,6 +1154,34 @@ return /******/ (function(modules) { // webpackBootstrap /** * Add an Http actions to a mapper. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. @@ -1207,7 +1235,7 @@ return /******/ (function(modules) { // webpackBootstrap } config.method = config.method || 'GET'; config.mapper = self.name; - _jsData.utils.deepMixIn(config)(_opts); + _jsData.utils.deepMixIn(config, _opts); return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { @@ -1225,6 +1253,36 @@ return /******/ (function(modules) { // webpackBootstrap * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for * action configuration options. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addActions * @method * @param {Object.} opts Object where the key is an action name @@ -1235,7 +1293,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.addActions = function addActions(opts) { opts || (opts = {}); return function (mapper) { - _jsData.utils.forOwn(mapper, function (value, key) { + _jsData.utils.forOwn(opts, function (value, key) { exports.addAction(key, value)(mapper); }); return mapper; @@ -1257,8 +1315,8 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 4, - full: '3.0.0-beta.4', + beta: 5, + full: '3.0.0-beta.5', major: 3, minor: 0, patch: 0 @@ -1270,22 +1328,25 @@ return /******/ (function(modules) { // webpackBootstrap * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower * as `js-data-fetch`. * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() + * + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * // ... + * }) * * @module js-data-http */ diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 089f27a..19b7ad5 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 62be9016f785db9870f0","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 62be9016f785db9870f0\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5ca3dba1258af7fede7c","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5ca3dba1258af7fede7c\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 1fc78f3..6a76dac 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.4 - Homepage +* @version 3.0.0-beta.5 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data")):"function"==typeof define&&define.amd?define(["js-data"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data")):e.JSDataHttp=t(e.JSData)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(r).join(t)}function i(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a)(r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return l.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:4,full:"3.0.0-beta.4",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdate",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=s(e,i),f=u.op="update",a.dbg(f,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),f=u.op="afterUpdate",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdateAll",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),f=u.op="updateAll",a.dbg(f,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),f=u.op="afterUpdateAll",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;nn;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a,r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(n){return l.utils.forOwn(e,function(e,r){t.addAction(r,e)(n)}),n}},t.version={beta:5,full:"3.0.0-beta.5",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdate",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=s(e,i),f=u.op="update",a.dbg(f,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),f=u.op="afterUpdate",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdateAll",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),f=u.op="updateAll",a.dbg(f,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),f=u.op="afterUpdateAll",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;n>8-a%1*8)){if(r=i.charCodeAt(a+=.75),r>255)throw new n;t=t<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){"use strict";e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){"use strict";var r=n(6);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,u){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),u===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(6);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r +* @version 3.0.0-beta.5 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -1154,6 +1154,34 @@ return /******/ (function(modules) { // webpackBootstrap /** * Add an Http actions to a mapper. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. @@ -1207,7 +1235,7 @@ return /******/ (function(modules) { // webpackBootstrap } config.method = config.method || 'GET'; config.mapper = self.name; - _jsData.utils.deepMixIn(config)(_opts); + _jsData.utils.deepMixIn(config, _opts); return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { @@ -1225,6 +1253,36 @@ return /******/ (function(modules) { // webpackBootstrap * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for * action configuration options. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addActions * @method * @param {Object.} opts Object where the key is an action name @@ -1235,7 +1293,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.addActions = function addActions(opts) { opts || (opts = {}); return function (mapper) { - _jsData.utils.forOwn(mapper, function (value, key) { + _jsData.utils.forOwn(opts, function (value, key) { exports.addAction(key, value)(mapper); }); return mapper; @@ -1257,8 +1315,8 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 4, - full: '3.0.0-beta.4', + beta: 5, + full: '3.0.0-beta.5', major: 3, minor: 0, patch: 0 @@ -1270,22 +1328,25 @@ return /******/ (function(modules) { // webpackBootstrap * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower * as `js-data-fetch`. * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() + * + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * // ... + * }) * * @module js-data-http */ diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 77aba75..a1ab4e4 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 387d4ab6abb4878de718","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 387d4ab6abb4878de718\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap c15a7e72a42c303f269e","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"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;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap c15a7e72a42c303f269e\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index 6dae1bf..ce0316a 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.4 - Homepage +* @version 3.0.0-beta.5 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u)(r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(e){return f.utils.forOwn(e,function(n,r){t.addAction(r,n)(e)}),e}},t.version={beta:4,full:"3.0.0-beta.4",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdate",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,o=s(e,o),l=a.op="update",u.dbg(l,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),l=a.op="afterUpdate",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdateAll",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),l=a.op="updateAll",u.dbg(l,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),l=a.op="afterUpdateAll",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u,r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(n){return f.utils.forOwn(e,function(e,r){t.addAction(r,e)(n)}),n}},t.version={beta:5,full:"3.0.0-beta.5",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdate",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,o=s(e,o),l=a.op="update",u.dbg(l,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),l=a.op="afterUpdate",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdateAll",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),l=a.op="updateAll",u.dbg(l,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),l=a.op="afterUpdateAll",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index b039e72..0054279 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","default","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","default","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index b2c0f59..b5fe91c 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1146,6 +1146,34 @@ return /******/ (function(modules) { // webpackBootstrap /** * Add an Http actions to a mapper. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. @@ -1199,7 +1227,7 @@ return /******/ (function(modules) { // webpackBootstrap } config.method = config.method || 'GET'; config.mapper = self.name; - _jsData.utils.deepMixIn(config)(_opts); + _jsData.utils.deepMixIn(config, _opts); return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { @@ -1217,6 +1245,36 @@ return /******/ (function(modules) { // webpackBootstrap * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for * action configuration options. * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * * @name module:js-data-http.addActions * @method * @param {Object.} opts Object where the key is an action name @@ -1227,7 +1285,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.addActions = function addActions(opts) { opts || (opts = {}); return function (mapper) { - _jsData.utils.forOwn(mapper, function (value, key) { + _jsData.utils.forOwn(opts, function (value, key) { exports.addAction(key, value)(mapper); }); return mapper; @@ -1249,8 +1307,8 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ exports.version = { - beta: 4, - full: '3.0.0-beta.4', + beta: 5, + full: '3.0.0-beta.5', major: 3, minor: 0, patch: 0 @@ -1262,22 +1320,25 @@ return /******/ (function(modules) { // webpackBootstrap * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower * as `js-data-fetch`. * - * __Script tag__: - * ```javascript - * window.HttpAdapter - * ``` - * __CommonJS__: - * ```javascript - * var HttpAdapter = require('js-data-http') - * ``` - * __ES6 Modules__: - * ```javascript - * import HttpAdapter from 'js-data-http' - * ``` - * __AMD__: - * ```javascript - * define('myApp', ['js-data-http'], function (HttpAdapter) { ... }) - * ``` + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() + * + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * // ... + * }) * * @module js-data-http */ diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index bc19b6b..cf2f9d7 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 13c03016b2804214fca6","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"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AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 13c03016b2804214fca6\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config)(_opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(mapper, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * __Script tag__:\n * ```javascript\n * window.HttpAdapter\n * ```\n * __CommonJS__:\n * ```javascript\n * var HttpAdapter = require('js-data-http')\n * ```\n * __ES6 Modules__:\n * ```javascript\n * import HttpAdapter from 'js-data-http'\n * ```\n * __AMD__:\n * ```javascript\n * define('myApp', ['js-data-http'], function (HttpAdapter) { ... })\n * ```\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 868649eaf68a9c6dd1fd","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;ACnCA;;AACA;;;;AAFA,KAAM,QAAQ,oBAAQ,CAAR,CAAd;;;AAQA,KAAI,WAAW,KAAf;;AAEA,KAAI;AACF,cAAW,UAAU,OAAO,KAA5B;AACD,EAFD,CAEE,OAAO,CAAP,EAAU,CAAE;;AAEd,UAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,UAAQ,SAAS,IAAT,IAAiB,UAAU,EAAnC;AACD;AACD,UAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,iBAAc,YAAY,EAA1B;AACA,UAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;AACD;AACD,UAAS,QAAT,GAA4B;AAAA,qCAAN,IAAM;AAAN,SAAM;AAAA;;AAC1B,OAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;AACA,UAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;AACD;;AAED,UAAS,MAAT,CAAiB,GAAjB,EAAsB;AACpB,UAAO,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;AAQD;;AAED,UAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,OAAI,CAAC,MAAL,EAAa;AACX,YAAO,GAAP;AACD;;AAED,OAAM,QAAQ,EAAd;;AAEA,iBAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;AACvC,SAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;AAC9C;AACD;AACD,SAAI,CAAC,cAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;AACvB,aAAM,CAAC,GAAD,CAAN;AACD;;AAED,SAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,WAAI,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAAhC,EAAiD;AAC/C,aAAI,EAAE,WAAF,EAAJ;AACD,QAFD,MAEO,IAAI,cAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;AAC5B,aAAI,cAAM,MAAN,CAAa,CAAb,CAAJ;AACD;AACD,aAAM,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;AACD,MAPD;AAQD,IAhBD;;AAkBA,OAAI,MAAM,MAAN,GAAe,CAAnB,EAAsB;AACpB,YAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;AACD;;AAED,UAAO,GAAP;AACD;;AAED,KAAM,YAAY,uBAAQ,SAA1B;;AAEA,KAAM,WAAW;;;;;;AAMf,aAAU,EANK;;;;;;;AAaf,uBAAoB,KAbL;;;;;;AAmBf,SAAM,KAnBS;;;;;;AAyBf,eAAY,EAzBG;;;;;;AA+Bf,WAAQ,EA/BO;;;;;;;AAsCf,aAAU;AAtCK,EAAjB;;;;;;;;;;;;;;;;AAuDA,UAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,OAAM,OAAO,IAAb;AACA,YAAS,OAAO,EAAhB;AACA,iBAAM,MAAN,CAAa,IAAb,EAAmB,QAAnB;AACA,0BAAQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;AACD;;;;;;AAMD,SAAQ,WAAR,GAAsB,WAAtB;;;AAGA,aAAY,SAAZ,GAAwB,OAAO,MAAP,CAAc,uBAAQ,SAAtB,EAAiC;AACvD,gBAAa;AACX,YAAO,WADI;AAEX,iBAAY,KAFD;AAGX,eAAU,IAHC;AAIX,mBAAc;AAJH;AAD0C,EAAjC,CAAxB;;AASA,QAAO,cAAP,CAAsB,WAAtB,EAAmC,WAAnC,EAAgD;AAC9C,iBAAc,IADgC;AAE9C;AAF8C,EAAhD;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,aAAY,MAAZ,GAAqB,cAAM,MAA3B;;AAEA,eAAM,sBAAN,CAA6B,YAAY,SAAzC,EAAoD;;;;;;;;;AASlD,iCATkD;;;;;;;;;;AAmBlD,iCAnBkD;;;;;;;;;AA4BlD,kCA5BkD;;;;;;;;;;;AAuClD,kCAvCkD;;;;;;;;;;;AAkDlD,iCAlDkD;;;;;;;;;AA2DlD,iCA3DkD;;;;;;;;;AAoElD,iCApEkD;;;;;;;;AA4ElD,kCA5EkD;;;;;;;;;;AAsFlD,kCAtFkD;;;;;;;;;;AAgGlD,iCAhGkD;;AAkGlD,SAlGkD,kBAkG1C,MAlG0C,EAkGlC,KAlGkC,EAkG3B,IAlG2B,EAkGrB;AAC3B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1GiD;AA4GlD,UA5GkD,mBA4GzC,MA5GyC,EA4GjC,KA5GiC,EA4G1B,IA5G0B,EA4GpB;AAC5B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IArHiD;AAuHlD,cAvHkD,uBAuHrC,MAvHqC,EAuH7B,KAvH6B,EAuHtB,IAvHsB,EAuHhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAhIiD;AAkIlD,WAlIkD,oBAkIxC,MAlIwC,EAkIhC,EAlIgC,EAkI5B,IAlI4B,EAkItB;AAC1B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA1IiD;AA4IlD,cA5IkD,uBA4IrC,MA5IqC,EA4I7B,KA5I6B,EA4ItB,IA5IsB,EA4IhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IApJiD;AAsJlD,OAtJkD,gBAsJ5C,MAtJ4C,EAsJpC,IAtJoC,EAsJ9B,QAtJ8B,EAsJpB;AAC5B,YAAO,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;AACD,IAxJiD;AA0JlD,QA1JkD,iBA0J3C,MA1J2C,EA0JnC,EA1JmC,EA0J/B,IA1J+B,EA0JzB;AACvB,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAlKiD;AAoKlD,WApKkD,oBAoKxC,MApKwC,EAoKhC,KApKgC,EAoKzB,IApKyB,EAoKnB;AAC7B,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IA5KiD;AA8KlD,OA9KkD,gBA8K5C,MA9K4C,EA8KpC,KA9KoC,EA8K7B,KA9K6B,EA8KtB,IA9KsB,EA8KhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MALM,CAAP;AAMD,IAtLiD;AAwLlD,UAxLkD,mBAwLzC,MAxLyC,EAwLjC,EAxLiC,EAwL7B,KAxL6B,EAwLtB,IAxLsB,EAwLhB;AAChC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAjMiD;AAmMlD,aAnMkD,sBAmMtC,MAnMsC,EAmM9B,KAnM8B,EAmMvB,KAnMuB,EAmMhB,IAnMgB,EAmMV;AACtC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IA5MiD;AA8MlD,cA9MkD,uBA8MrC,MA9MqC,EA8M7B,OA9M6B,EA8MpB,IA9MoB,EA8Md;AAClC,SAAM,OAAO,IAAb;AACA,YAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAU,QAAV,EAAoB;AACzB,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAP;AACD,MANM,CAAP;AAOD,IAvNiD;;;;;;;;;;;;;;;AAqOlD,QArOkD,iBAqO3C,MArO2C,EAqOnC,KArOmC,EAqO5B,IArO4B,EAqOtB;AAC1B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,KAAZ,GAAoB,IAApB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,KAAV,CAAgB,IAAhB,CAAqB,IAArB,EAA2B,MAA3B,EAAmC,KAAnC,EAA0C,IAA1C,CAAP;AACD,IAhPiD;;;;;;;;;;;;;;;AA8PlD,SA9PkD,kBA8P1C,MA9P0C,EA8PlC,KA9PkC,EA8P3B,IA9P2B,EA8PrB;AAC3B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,KAApC,EAA2C,IAA3C,CAAP;AACD,IAtQiD;;;;;;;;;;;;;;;AAoRlD,aApRkD,sBAoRtC,MApRsC,EAoR9B,KApR8B,EAoRvB,IApRuB,EAoRjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA5RiD;;;;;;;;;;;;;;AAySlD,MAzSkD,eAyS7C,GAzS6C,EAySxC,MAzSwC,EAyShC,IAzSgC,EAyS1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjUiD;;;;;;;;;;;;;;AA8UlD,cA9UkD,uBA8UrC,MA9UqC,EA8U7B,QA9U6B,EA8UnB,IA9UmB,EA8Ub;AACnC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;AACtC,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;AACxC,cAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;AACD;AACD,SAAI,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;AAC/C,cAAO,SAAS,IAAhB;AACD;AACD,YAAO,QAAP;AACD,IA1ViD;;;;;;;;;;;;;;;AAwWlD,UAxWkD,mBAwWzC,MAxWyC,EAwWjC,EAxWiC,EAwW7B,IAxW6B,EAwWvB;AACzB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,EAArC,EAAyC,IAAzC,CAAP;AACD,IAhXiD;;;;;;;;;;;;;;;AA8XlD,aA9XkD,sBA8XtC,MA9XsC,EA8X9B,KA9X8B,EA8XvB,IA9XuB,EA8XjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAxYiD;;;;;;;;;;AAiZlD,QAjZkD,mBAiZlC;AACd,SAAI,OAAJ,EAAa;AAAA;;AACX,4BAAQ,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;AACD;AACF,IArZiD;;;;;;;;;;;;;;;;AAoalD,QApakD;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,eAoa3C,MApa2C,EAoanC,IApamC,EAoa7B;AACnB,SAAM,gBAAgB;AACpB,eAAQ,OAAO,MADK;;AAGpB,gBAAS,IAAI,OAAJ,CAAY,OAAO,OAAnB;AAHW,MAAtB;;AAMA,SAAI,OAAO,IAAX,EAAiB;AACf,qBAAc,IAAd,GAAqB,cAAM,MAAN,CAAa,OAAO,IAApB,CAArB;AACD;;AAED,YAAO,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAZ,EAAiD,aAAjD,CAAN,EAAuE,IAAvE,CAA4E,UAAU,QAAV,EAAoB;AACrG,gBAAS,MAAT,GAAkB;AAChB,iBAAQ,OAAO,MADC;AAEhB,cAAK,OAAO;AAFI,QAAlB;AAIA,cAAO,SAAS,IAAT,GAAgB,IAAhB,CAAqB,UAAU,IAAV,EAAgB;AAC1C,kBAAS,IAAT,GAAgB,IAAhB;AACA,gBAAO,QAAP;AACD,QAHM,CAAP;AAID,MATM,CAAP;AAUD,IAzbiD;;;;;;;;;;;;;;;AAuclD,OAvckD,gBAuc5C,MAvc4C,EAucpC,EAvcoC,EAuchC,IAvcgC,EAuc1B;AACtB,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,IAAV,CAAe,IAAf,CAAoB,IAApB,EAA0B,MAA1B,EAAkC,EAAlC,EAAsC,IAAtC,CAAP;AACD,IA/ciD;;;;;;;;;;;;;;;AA6dlD,UA7dkD,mBA6dzC,MA7dyC,EA6djC,KA7diC,EA6d1B,IA7d0B,EA6dpB;AAC5B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,OAAV,CAAkB,IAAlB,CAAuB,IAAvB,EAA6B,MAA7B,EAAqC,KAArC,EAA4C,IAA5C,CAAP;AACD,IAveiD;;;;;;;;;;;;;AAmflD,MAnfkD,eAmf7C,GAnf6C,EAmfxC,MAnfwC,EAmfhC,IAnfgC,EAmf1B;AACtB,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IA3gBiD;;;;;;;;;;;AAqhBlD,cArhBkD,uBAqhBrC,MArhBqC,EAqhB7B,EArhB6B,EAqhBzB,IArhByB,EAqhBnB;AAC7B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,cAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;AACA,SAAM,eAAe,OAAO,YAAP,IAAuB,EAA5C;AACA,SAAI,WAAW,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;AAEA,kBAAa,OAAb,CAAqB,UAAU,GAAV,EAAe;AAClC,WAAI,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;AAC3C;AACD;AACD,WAAI,aAAJ;AACA,WAAM,YAAY,IAAI,UAAtB;AACA,WAAM,YAAY,IAAI,WAAJ,EAAlB;AACA,WAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;AAEA,WAAI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;AAClD,aAAI,aAAa,KAAjB,EAAwB;AACtB,kBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;AACD;AACD,gBAAO,KAAP;AACD,QALD,MAKO;AACL,gBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;;AAEA,aAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,kBAAO,EAAP;AACD;;AAED,aAAI,IAAJ,EAAU;AACR,sBAAW,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0B,cAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;AACD;;AAED,aAAI,QAAJ,EAAc;AAAA;AACZ,oBAAO,KAAK,QAAZ;AACA,iBAAM,QAAQ,EAAd;AACA,2BAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,qBAAM,GAAN,IAAa,KAAb;AACD,cAFD;AAGA,2BAAM,CAAN,CAAQ,KAAR,EAAe,SAAf;AACA,wBAAW,SAAS,KAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;AACA;AAAA,kBAAO;AAAP;AARY;;AAAA;AASb;AACF;AACF,MApCD;;AAsCA,YAAO,QAAP;AACD,IAnkBiD;;;;;;;;;;;AA6kBlD,UA7kBkD,mBA6kBzC,MA7kByC,EA6kBjC,MA7kBiC,EA6kBzB,EA7kByB,EA6kBrB,IA7kBqB,EA6kBf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,OAAO,CACX,cAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoC,cAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,KAAK,QAA1C,GAAqD,OAAO,QAAhG,GAA4G,KAAK,QADtG,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0B,cAAM,QAAN,CAAe,EAAf,KAAsB,cAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;AAIA,SAAI,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;AACpE,YAAK,IAAL,CAAU,EAAV;AACD;AACD,YAAO,SAAS,KAAT,gBAAsB,IAAtB,CAAP;AACD,IAxlBiD;AA0lBlD,YA1lBkD,qBA0lBvC,IA1lBuC,EA0lBjC;AACf,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,cAAO,EAAP;AACD;AACD,YAAO,cAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;AACD,IAhmBiD;AAkmBlD,YAlmBkD,qBAkmBvC,MAlmBuC,EAkmB/B,IAlmB+B,EAkmBzB;AACvB,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,WAAN,CAAkB,KAAK,MAAvB,CAAJ,EAAoC;AAClC,WAAI,cAAM,WAAN,CAAkB,OAAO,MAAzB,CAAJ,EAAsC;AACpC,gBAAO,KAAK,MAAZ;AACD;AACD,cAAO,OAAO,MAAd;AACD;AACD,YAAO,KAAK,MAAZ;AACD,IA3mBiD;;;;;;;;;;;;AAsnBlD,OAtnBkD,gBAsnB5C,MAtnB4C,EAsnBpC,IAtnBoC,EAsnB9B;AAClB,SAAM,OAAO,IAAb;AACA,SAAM,QAAQ,IAAI,IAAJ,EAAd;AACA,cAAS,OAAO,EAAhB;AACA,SAAM,UAAU,OAAO,IAAvB;AACA,SAAM,QAAQ,OAAO,KAArB;AACA,SAAM,UAAU,OAAO,OAAvB;AACA,cAAS,cAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;AACA,cAAS,cAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;AACA,YAAO,IAAP,GAAc,OAAd;AACA,YAAO,KAAP,GAAe,KAAf;AACA,YAAO,OAAP,GAAiB,OAAjB;AACA,SAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;AACxE,cAAO,GAAP,IAAc,GAAd;AACD;AACD,YAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;AACA,SAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;AACA,SAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;AAC7E,cAAO,GAAP,IAAc,MAAd;AACD;;AAED,cAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,WAAM,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;AACA,WAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;AAC3C,aAAI,KAAK,GAAT,EAAc;AACZ,gBAAK,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB;AACD;AACD,gBAAO,IAAP;AACD,QALD,MAKO;AACL,aAAI,KAAK,KAAT,EAAgB;AACd,gBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;AACD;AACD,gBAAO,cAAM,MAAN,CAAa,IAAb,CAAP;AACD;AACF;;AAED,SAAI,CAAC,KAAK,IAAV,EAAgB;AACd,aAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN;AACD;;AAED,YAAO,cAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EAA6C,IAA7C,CAAkD,UAAU,OAAV,EAAmB;AAC1E,gBAAS,WAAW,MAApB;AACA,WAAI,aAAa,KAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,KAAK,IAArD,CAAJ,EAAgE;AAC9D,gBAAO,KAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;AACD;AACD,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EAAiD,KAAjD,CAAuD,UAAU,GAAV,EAAe;AAC3E,gBAAO,KAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAP;AACD,QAFM,CAAP;AAGD,MARM,EAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,cAAM,OAAN,CAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EAAsD,IAAtD,CAA2D,UAAU,SAAV,EAAqB;AACrF,gBAAO,aAAa,QAApB;AACD,QAFM,CAAP;AAGD,MAZM,CAAP;AAaD,IA3qBiD;;;;;;;;;;;;;;AAwrBlD,OAxrBkD,gBAwrB5C,GAxrB4C,EAwrBvC,IAxrBuC,EAwrBjC,MAxrBiC,EAwrBzB,IAxrByB,EAwrBnB;AAC7B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,YAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,MAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,WAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAjtBiD;;;;;;;;;;;;;;AA8tBlD,MA9tBkD,eA8tB7C,GA9tB6C,EA8tBxC,IA9tBwC,EA8tBlC,MA9tBkC,EA8tB1B,IA9tB0B,EA8tBpB;AAC5B,SAAM,OAAO,IAAb;AACA,SAAI,WAAJ;AACA,gBAAW,SAAS,EAApB;AACA,cAAS,OAAO,EAAhB;AACA,YAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,YAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,UAAK,KAAK,EAAL,GAAU,WAAf;AACA,YAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EAAiD,IAAjD,CAAsD,UAAU,OAAV,EAAmB;;AAE9E,gBAAS,cAAM,WAAN,CAAkB,OAAlB,IAA6B,MAA7B,GAAsC,OAA/C;AACA,YAAK,KAAK,EAAL,GAAU,KAAf;AACA,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,MANM,EAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAf;AACA,cAAO,cAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EAA2D,IAA3D,CAAgE,UAAU,SAAV,EAAqB;;AAE1F,gBAAO,cAAM,WAAN,CAAkB,SAAlB,IAA+B,QAA/B,GAA0C,SAAjD;AACD,QAHM,CAAP;AAID,MAbM,CAAP;AAcD,IAvvBiD;;;;;;;;;;;;;AAmwBlD,iBAnwBkD,0BAmwBlC,MAnwBkC,EAmwB1B,MAnwB0B,EAmwBlB,IAnwBkB,EAmwBZ;AACpC,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACzC,cAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;AAC3C,cAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;AACD;AACD,YAAO,MAAP;AACD,IA5wBiD;;;;;;;;;;;;;;;;AA2xBlD,gBA3xBkD,yBA2xBnC,GA3xBmC,EA2xB9B,MA3xB8B,EA2xBtB,IA3xBsB,EA2xBhB;AAChC,YAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AACD,IA7xBiD;;;;;;;;;;;;;AAyyBlD,YAzyBkD,qBAyyBvC,MAzyBuC,EAyyB/B,IAzyB+B,EAyyBzB,IAzyByB,EAyyBnB;AAC7B,cAAS,OAAO,EAAhB;AACA,SAAI,cAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AACpC,cAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;AACD;AACD,SAAI,cAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;AACtC,cAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;AACD;AACD,YAAO,IAAP;AACD,IAlzBiD;;;;;;;;;;;;;;;;AAi0BlD,MAj0BkD,eAi0B7C,MAj0B6C,EAi0BrC,KAj0BqC,EAi0B9B,KAj0B8B,EAi0BvB,IAj0BuB,EAi0BjB;AAC/B,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,SAAI,CAAC,cAAM,KAAN,CAAY,QAAZ,CAAqB,KAArB,CAAL,EAAkC;AAChC,aAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD;AACD,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;;AAEA,YAAO,UAAU,GAAV,CAAc,IAAd,CAAmB,IAAnB,EAAyB,MAAzB,EAAiC,KAAjC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IA/0BiD;;;;;;;;;;;;;;AA41BlD,SA51BkD,kBA41B1C,MA51B0C,EA41BlC,EA51BkC,EA41B9B,KA51B8B,EA41BvB,IA51BuB,EA41BjB;AAC/B,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,MAAV,CAAiB,IAAjB,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC,EAApC,EAAwC,KAAxC,EAA+C,IAA/C,CAAP;AACD,IAp2BiD;;;;;;;;;;;;;;AAi3BlD,YAj3BkD,qBAi3BvC,MAj3BuC,EAi3B/B,KAj3B+B,EAi3BxB,KAj3BwB,EAi3BjB,IAj3BiB,EAi3BX;AACrC,SAAM,OAAO,IAAb;AACA,eAAU,QAAQ,EAAlB;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,mBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,SAAV,CAAoB,IAApB,CAAyB,IAAzB,EAA+B,MAA/B,EAAuC,KAAvC,EAA8C,KAA9C,EAAqD,IAArD,CAAP;AACD,IA33BiD;;;;;;;;;;;;;;;;;;;;AA84BlD,aA94BkD,sBA84BtC,MA94BsC,EA84B9B,OA94B8B,EA84BrB,IA94BqB,EA84Bf;AACjC,SAAM,OAAO,IAAb;AACA,cAAS,OAAO,EAAhB;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,UAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;;AAEA,YAAO,UAAU,UAAV,CAAqB,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC,OAAxC,EAAiD,IAAjD,CAAP;AACD;AAt5BiD,EAApD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAo8BA,SAAQ,SAAR,GAAoB,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;AAClD,OAAI,CAAC,IAAD,IAAS,CAAC,cAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;AAClC,WAAM,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;AACD;AACD,UAAO,UAAU,MAAV,EAAkB;AACvB,SAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,aAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;AACD;AACD,UAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,cAAO,MAAP;AAAe,MAAlE;AACA,UAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,cAAO,QAAP;AAAiB,MAAxE;AACA,UAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,cAAO,cAAM,MAAN,CAAa,GAAb,CAAP;AAA0B,MAAtF;AACA,YAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAClC,WAAM,OAAO,IAAb;AACA,WAAI,cAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,iBAAQ,EAAR;AACD;AACD,eAAQ,SAAS,EAAjB;AACA,WAAI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAArB,IAAuC,MAAvD,CAAd;AACA,WAAI,SAAS,EAAb;AACA,qBAAM,MAAN,CAAa,MAAb,EAAqB,IAArB;AACA,WAAI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAhD,EAA0D;AACxD,eAAM,QAAN,GAAiB,OAAO,QAAxB;AACD;AACD,WAAI,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;AAC3C,gBAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;AACD,QAFD,MAEO;AACL,aAAI,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0B,cAAM,MAAN,CAAa,EAAb,IAAmB,EAAnB,GAAwB,IAAlD,EAAwD,KAAxD,CAFS,CAAX;AAIA,aAAI,cAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;AACpB,gBAAK,IAAL,CAAU,EAAV;AACD;AACD,cAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;AACA,gBAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;AACD;AACD,cAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;AACA,cAAO,MAAP,GAAgB,KAAK,IAArB;AACA,qBAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;AACA,cAAO,cAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OADvB,EAEJ,IAFI,CAEC,UAAU,MAAV,EAAkB;AAAE,gBAAO,QAAQ,IAAR,CAAa,MAAb,CAAP;AAA6B,QAFlD,EAGJ,IAHI,CAGC,UAAU,IAAV,EAAgB;AACpB,aAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,gBAAK,MAAL,CAAY,MAAZ,GAAqB,KAAK,IAA1B;AACD;AACD,gBAAO,IAAP;AACD,QARI,EASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QATxB,EASkC,MAAM,aAAN,IAAuB,KAAK,aAT9D,CAAP;AAUD,MAtCD;AAuCA,YAAO,MAAP;AACD,IA/CD;AAgDD,EApDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FA,SAAQ,UAAR,GAAqB,SAAS,UAAT,CAAqB,IAArB,EAA2B;AAC9C,YAAS,OAAO,EAAhB;AACA,UAAO,UAAU,MAAV,EAAkB;AACvB,mBAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,eAAQ,SAAR,CAAkB,GAAlB,EAAuB,KAAvB,EAA8B,MAA9B;AACD,MAFD;AAGA,YAAO,MAAP;AACD,IALD;AAMD,EARD;;;;;;;;;;;;;;;;AAwBA,SAAQ,OAAR,GAAkB,gBAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 868649eaf68a9c6dd1fd\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file From e6fa0573daf912ac8ae36378e3cd4d82b376ec64 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 18 May 2016 00:00:02 -0700 Subject: [PATCH 04/10] 3.0.0-beta.6 --- dist/js-data-http.js | 7778 ++++++++++++++-------------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 5927 +++++++++++---------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 4300 +++++---------- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 8040 insertions(+), 9985 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 8647eea..c7e86f6 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,4289 +1,4163 @@ /*! * js-data-http -* @version 3.0.0-beta.5 - Homepage +* @version 3.0.0-beta.6 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("js-data")); - else if(typeof define === 'function' && define.amd) - define(["js-data"], factory); - else if(typeof exports === 'object') - exports["JSDataHttp"] = factory(require("js-data")); - else - root["JSDataHttp"] = factory(root["JSData"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - var _jsData = __webpack_require__(1); - - var _jsDataAdapter = __webpack_require__(2); - - /* global fetch:true Headers:true Request:true */ - - var axios = __webpack_require__(3); - - - var hasFetch = false; - - try { - hasFetch = window && window.fetch; - } catch (e) {} - - function isValidString(value) { - return value != null && value !== ''; - } - function join(items, separator) { - separator || (separator = ''); - return items.filter(isValidString).join(separator); - } - function makePath() { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) : + typeof define === 'function' && define.amd ? define('js-data-http', ['exports', 'js-data'], factory) : + (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); +}(this, function (exports,jsData) { 'use strict'; + + var __commonjs_global = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : this; + function __commonjs(fn, module) { return module = { exports: {} }, fn(module, module.exports, __commonjs_global), module.exports; } + + + var babelHelpers = {}; + babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + babelHelpers.defineProperty = function (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; + }; + + babelHelpers.slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + + babelHelpers; + + var axios = __commonjs(function (module, exports, global) { + /* axios v0.11.1 | (c) 2016 by Matt Zabriskie */ + (function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["axios"] = factory(); + else + root["axios"] = factory(); + })(__commonjs_global, function() { + return /******/ (function(modules) { // webpackBootstrap + /******/ // The module cache + /******/ var installedModules = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if(installedModules[moduleId]) + /******/ return installedModules[moduleId].exports; + /******/ + /******/ // Create a new module (and put it into the cache) + /******/ var module = installedModules[moduleId] = { + /******/ exports: {}, + /******/ id: moduleId, + /******/ loaded: false + /******/ }; + /******/ + /******/ // Execute the module function + /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + /******/ + /******/ // Flag the module as loaded + /******/ module.loaded = true; + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ } + /******/ + /******/ + /******/ // expose the modules object (__webpack_modules__) + /******/ __webpack_require__.m = modules; + /******/ + /******/ // expose the module cache + /******/ __webpack_require__.c = installedModules; + /******/ + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + /******/ + /******/ // Load entry module and return exports + /******/ return __webpack_require__(0); + /******/ }) + /************************************************************************/ + /******/ ([ + /* 0 */ + /***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(1); + + /***/ }, + /* 1 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var defaults = __webpack_require__(2); + var utils = __webpack_require__(3); + var dispatchRequest = __webpack_require__(4); + var InterceptorManager = __webpack_require__(13); + var isAbsoluteURL = __webpack_require__(14); + var combineURLs = __webpack_require__(15); + var bind = __webpack_require__(16); + var transformData = __webpack_require__(8); + + function Axios(defaultConfig) { + this.defaults = utils.merge({}, defaultConfig); + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } + + Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = utils.merge({ + url: arguments[0] + }, arguments[1]); + } + + config = utils.merge(defaults, this.defaults, { method: 'get' }, config); + + // Support baseURL config + if (config.baseURL && !isAbsoluteURL(config.url)) { + config.url = combineURLs(config.baseURL, config.url); + } + + // Don't allow overriding defaults.withCredentials + config.withCredentials = config.withCredentials || this.defaults.withCredentials; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers || {} + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); + + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + }; + + var defaultInstance = new Axios(defaults); + var axios = module.exports = bind(Axios.prototype.request, defaultInstance); + module.exports.Axios = Axios; + + // Expose properties from defaultInstance + axios.defaults = defaultInstance.defaults; + axios.interceptors = defaultInstance.interceptors; + + // Factory for creating new instances + axios.create = function create(defaultConfig) { + return new Axios(defaultConfig); + }; + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = __webpack_require__(17); + + // Provide aliases for supported request methods + utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url + })); + }; + axios[method] = bind(Axios.prototype[method], defaultInstance); + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url, + data: data + })); + }; + axios[method] = bind(Axios.prototype[method], defaultInstance); + }); + + + /***/ }, + /* 2 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + var PROTECTION_PREFIX = /^\)\]\}',?\n/; + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + module.exports = { + transformRequest: [function transformRequest(data, headers) { + if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) { + // Set application/json if no Content-Type has been specified + if (!utils.isUndefined(headers)) { + utils.forEach(headers, function processContentTypeHeader(val, key) { + if (key.toLowerCase() === 'content-type') { + headers['Content-Type'] = val; + } + }); + + if (utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = 'application/json;charset=utf-8'; + } + } + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + data = data.replace(PROTECTION_PREFIX, ''); + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + patch: utils.merge(DEFAULT_CONTENT_TYPE), + post: utils.merge(DEFAULT_CONTENT_TYPE), + put: utils.merge(DEFAULT_CONTENT_TYPE) + }, + + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + } + }; + + + /***/ }, + /* 3 */ + /***/ function(module, exports) { + + 'use strict'; + + /*global toString:true*/ + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ + function isArray(val) { + return toString.call(val) === '[object Array]'; + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + function isArrayBuffer(val) { + return toString.call(val) === '[object ArrayBuffer]'; + } + + /** + * Determine if a value is a FormData + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ + function isFormData(val) { + return (typeof FormData !== 'undefined') && (val instanceof FormData); + } + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ + function isString(val) { + return typeof val === 'string'; + } + + /** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ + function isNumber(val) { + return typeof val === 'number'; + } + + /** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ + function isUndefined(val) { + return typeof val === 'undefined'; + } + + /** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ + function isObject(val) { + return val !== null && typeof val === 'object'; + } + + /** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ + function isDate(val) { + return toString.call(val) === '[object Date]'; + } + + /** + * Determine if a value is a File + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + function isFile(val) { + return toString.call(val) === '[object File]'; + } + + /** + * Determine if a value is a Blob + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ + function isBlob(val) { + return toString.call(val) === '[object Blob]'; + } + + /** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + function isFunction(val) { + return toString.call(val) === '[object Function]'; + } + + /** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ + function isStream(val) { + return isObject(val) && isFunction(val.pipe); + } + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ + function trim(str) { + return str.replace(/^\s*/, '').replace(/\s*$/, ''); + } + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * typeof document.createElement -> undefined + */ + function isStandardBrowserEnv() { + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' && + typeof document.createElement === 'function' + ); + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ + function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object' && !isArray(obj)) { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + fn.call(null, obj[key], key, obj); + } + } + } + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (typeof result[key] === 'object' && typeof val === 'object') { + result[key] = merge(result[key], val); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; + } + + module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + trim: trim + }; + + + /***/ }, + /* 4 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + /** + * Dispatch a request to the server using whichever adapter + * is supported by the current environment. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + module.exports = function dispatchRequest(config) { + return new Promise(function executor(resolve, reject) { + try { + var adapter; + + if (typeof config.adapter === 'function') { + // For custom adapter support + adapter = config.adapter; + } else if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(5); + } else if (typeof process !== 'undefined') { + // For node use HTTP adapter + adapter = __webpack_require__(5); + } + + if (typeof adapter === 'function') { + adapter(resolve, reject, config); + } + } catch (e) { + reject(e); + } + }); + }; + + + + /***/ }, + /* 5 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + var buildURL = __webpack_require__(6); + var parseHeaders = __webpack_require__(7); + var transformData = __webpack_require__(8); + var isURLSameOrigin = __webpack_require__(9); + var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10); + var settle = __webpack_require__(11); + + module.exports = function xhrAdapter(resolve, reject, config) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + var loadEvent = 'onreadystatechange'; + var xDomain = false; + + // For IE 8/9 CORS support + // Only supports POST and GET calls and doesn't returns the response headers. + // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. + if (("production") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { + request = new window.XDomainRequest(); + loadEvent = 'onload'; + xDomain = true; + request.onprogress = function handleProgress() {}; + request.ontimeout = function handleTimeout() {}; + } + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // Listen for ready state + request[loadEvent] = function handleLoad() { + if (!request || (request.readyState !== 4 && !xDomain)) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + if (request.status === 0) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: transformData( + responseData, + responseHeaders, + config.transformResponse + ), + // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) + status: request.status === 1223 ? 204 : request.status, + statusText: request.status === 1223 ? 'No Content' : request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new Error('Network Error')); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var err = new Error('timeout of ' + config.timeout + 'ms exceeded'); + err.timeout = config.timeout; + err.code = 'ECONNABORTED'; + reject(err); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + var cookies = __webpack_require__(12); + + // Add xsrf header + var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (config.withCredentials) { + request.withCredentials = true; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + if (request.responseType !== 'json') { + throw e; + } + } + } + + // Handle progress if needed + if (config.progress) { + if (config.method === 'post' || config.method === 'put') { + request.upload.addEventListener('progress', config.progress); + } else if (config.method === 'get') { + request.addEventListener('progress', config.progress); + } + } + + if (requestData === undefined) { + requestData = null; + } + + // Send the request + request.send(requestData); + }; + + + /***/ }, + /* 6 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + function encode(val) { + return encodeURIComponent(val). + replace(/%40/gi, '@'). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ + module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } + + if (!utils.isArray(val)) { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; + }; + + + + /***/ }, + /* 7 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ + module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; + }; + + + /***/ }, + /* 8 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; + }; + + + /***/ }, + /* 9 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() + ); + + + /***/ }, + /* 10 */ + /***/ function(module, exports) { + + 'use strict'; + + // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js + + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + function E() { + this.message = 'String contains an invalid character'; + } + E.prototype = new Error; + E.prototype.code = 5; + E.prototype.name = 'InvalidCharacterError'; + + function btoa(input) { + var str = String(input); + var output = ''; + for ( + // initialize result and counter + var block, charCode, idx = 0, map = chars; + // if the next str index does not exist: + // change the mapping table to "=" + // check if d has no fractional digits + str.charAt(idx | 0) || (map = '=', idx % 1); + // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = str.charCodeAt(idx += 3 / 4); + if (charCode > 0xFF) { + throw new E(); + } + block = block << 8 | charCode; + } + return output; + } + + module.exports = btoa; + + + /***/ }, + /* 11 */ + /***/ function(module, exports) { + + 'use strict'; + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + // Note: status is not exposed by XDomainRequest + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(response); + } + }; + + + /***/ }, + /* 12 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() + ); + + + /***/ }, + /* 13 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(3); + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + module.exports = InterceptorManager; + + + /***/ }, + /* 14 */ + /***/ function(module, exports) { + + 'use strict'; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); + }; + + + /***/ }, + /* 15 */ + /***/ function(module, exports) { + + 'use strict'; + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ + module.exports = function combineURLs(baseURL, relativeURL) { + return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, ''); + }; + + + /***/ }, + /* 16 */ + /***/ function(module, exports) { + + 'use strict'; + + module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; + }; + + + /***/ }, + /* 17 */ + /***/ function(module, exports) { + + 'use strict'; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ + module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + }; + + + /***/ } + /******/ ]) + }); + ; + }); + + var axios$1 = (axios && typeof axios === 'object' && 'default' in axios ? axios['default'] : axios); + + var noop = function noop() { + var self = this; + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } - - var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - function encode(val) { - return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); - } - - function buildUrl(url, params) { - if (!params) { - return url; + + var opts = args[args.length - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + var noop2 = function noop2() { + var self = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; } - - var parts = []; - - _jsData.utils.forOwn(params, function (val, key) { - if (val === null || typeof val === 'undefined') { + + var opts = args[args.length - 2]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { return; } - if (!_jsData.utils.isArray(val)) { - val = [val]; - } - - val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { - v = v.toISOString(); - } else if (_jsData.utils.isObject(v)) { - v = _jsData.utils.toJson(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); + final.push(item); + seen[item] = 0; }); - - if (parts.length > 0) { - url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); - } - - return url; - } - - var __super__ = _jsDataAdapter.Adapter.prototype; - - var DEFAULTS = { - // Default and user-defined settings - /** - * @name HttpAdapter#basePath - * @type {string} - */ - basePath: '', - + return final; + }; + + var withoutRelations = function withoutRelations(mapper, props) { + return jsData.utils.omit(props, mapper.relationFields || []); + }; + + var DEFAULTS$1 = { /** - * @name HttpAdapter#forceTrailingSlash + * Whether to log debugging information. + * + * @name Adapter#debug * @type {boolean} * @default false */ - forceTrailingSlash: false, - - /** - * @name HttpAdapter#http - * @type {Function} - */ - http: axios, - - /** - * @name HttpAdapter#httpConfig - * @type {Object} - */ - httpConfig: {}, - - /** - * @name HttpAdapter#suffix - * @type {string} - */ - suffix: '', - + debug: false, + /** - * @name HttpAdapter#useFetch + * Whether to return a more detailed response object. + * + * @name Adapter#raw * @type {boolean} * @default false */ - useFetch: false + raw: false }; - + /** - * HttpAdapter class. + * Abstract class meant to be extended by adapters. * - * @class HttpAdapter - * @extends Adapter - * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO + * @class Adapter + * @abstract + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. */ - function HttpAdapter(opts) { + function Adapter(opts) { var self = this; opts || (opts = {}); - _jsData.utils.fillIn(opts, DEFAULTS); - _jsDataAdapter.Adapter.call(self, opts); + jsData.utils.fillIn(opts, DEFAULTS$1); + jsData.utils.fillIn(self, opts); } - + /** - * @name module:js-data-http.HttpAdapter - * @see HttpAdapter + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response */ - exports.HttpAdapter = HttpAdapter; - - // Setup prototype inheritance from Adapter - HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } - }); - - Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: _jsDataAdapter.Adapter - }); - + function Response(data, meta, op) { + var self = this; + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + self.data = data; + + jsData.utils.fillIn(self, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + self.op = op; + } + /** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() + * Alternative to ES6 class syntax for extending `Adapter`. * - * @name HttpAdapter.extend + * @name Adapter.extend * @method * @param {Object} [instanceProps] Properties that will be added to the * prototype of the subclass. * @param {Object} [classProps] Properties that will be added as static * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. + * @return {Object} Subclass of `Adapter`. */ - HttpAdapter.extend = _jsData.utils.extend; - - _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + Adapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { /** - * @name HttpAdapter#afterDEL + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. */ - afterDEL: _jsDataAdapter.noop2, - + afterCount: noop2, + /** - * @name HttpAdapter#afterGET + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. */ - afterGET: _jsDataAdapter.noop2, - + afterCreate: noop2, + /** - * @name HttpAdapter#afterHTTP + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. */ - afterHTTP: _jsDataAdapter.noop2, - + afterCreateMany: noop2, + /** - * @name HttpAdapter#afterPOST - * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. */ - afterPOST: _jsDataAdapter.noop2, - + afterDestroy: noop2, + /** - * @name HttpAdapter#afterPUT + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. */ - afterPUT: _jsDataAdapter.noop2, - + afterDestroyAll: noop2, + /** - * @name HttpAdapter#beforeDEL + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. */ - beforeDEL: _jsDataAdapter.noop, - + afterFind: noop2, + /** - * @name HttpAdapter#beforeGET + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. */ - beforeGET: _jsDataAdapter.noop, - + afterFindAll: noop2, + /** - * @name HttpAdapter#beforeHTTP + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum * @method - * @param {Object} config - * @param {Object} opts + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. */ - beforeHTTP: _jsDataAdapter.noop, - + afterSum: noop2, + /** - * @name HttpAdapter#beforePOST + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. */ - beforePOST: _jsDataAdapter.noop, - + afterUpdate: noop2, + /** - * @name HttpAdapter#beforePUT + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. */ - beforePUT: _jsDataAdapter.noop, - - _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _end: function _end(mapper, opts, response) { - return [this.deserialize(mapper, response, opts), response]; - }, - _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - - + afterUpdateAll: noop2, + /** - * Retrieve the number of records that match the selection `query`. + * Lifecycle method method called by updateMany. * - * @name HttpAdapter#count + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. */ - count: function count(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); - }, - - + afterUpdateMany: noop2, + /** - * Create a new the record from the provided `props`. + * Lifecycle method method called by count. * - * @name HttpAdapter#create + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` */ - create: function create(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); - }, - - + beforeCount: noop, + /** - * Create multiple new records in batch. + * Lifecycle method method called by create. * - * @name HttpAdapter#createMany + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` */ - createMany: function createMany(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); - }, - - + beforeCreate: noop, + /** - * Make an Http request to `url` according to the configuration in `config`. + * Lifecycle method method called by createMany. * - * @name HttpAdapter#DEL + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany * @method - * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to - * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. - * @return {Promise} + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` */ - DEL: function DEL(url, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'delete'; - - // beforeDEL lifecycle hook - op = opts.op = 'beforeDEL'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterDEL lifecycle hook - op = opts.op = 'afterDEL'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - + beforeCreateMany: noop, + /** - * Transform the server response object into the payload that will be returned - * to JSData. + * Lifecycle method method called by destroy. * - * @name HttpAdapter#deserialize + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` */ - deserialize: function deserialize(mapper, response, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.deserialize)) { - return opts.deserialize(mapper, response, opts); - } - if (_jsData.utils.isFunction(mapper.deserialize)) { - return mapper.deserialize(mapper, response, opts); - } - if (response && response.hasOwnProperty('data')) { - return response.data; - } - return response; - }, - - + beforeDestroy: noop, + /** - * Destroy the record with the given primary key. + * Lifecycle method method called by destroyAll. * - * @name HttpAdapter#destroy + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` */ - destroy: function destroy(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. + * + * @name Adapter#dbg + * @method + */ + dbg: function dbg() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this.log.apply(this, ['debug'].concat(args)); }, - - + + /** - * Destroy the records that match the selection `query`. + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. * - * @name HttpAdapter#destroyAll + * @name Adapter#count * @method * @param {Object} mapper The mapper. - * @param {Object} query Selection query. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ - destroyAll: function destroyAll(mapper, query, opts) { + count: function count(mapper, query, opts) { var self = this; + var op = void 0; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); - }, - - - /** - * Log an error. - * - * @name HttpAdapter#error - * @method - * @param {...*} [args] Arguments to log. - */ - error: function error() { - if (console) { - var _console; - - (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); - } + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._count(mapper, query, opts)); + }).then(function (results) { + var _results = babelHelpers.slicedToArray(results, 2); + + var data = _results[0]; + var result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * Make an Http request using `window.fetch`. + * Create a new record. Called by `Mapper#create`. * - * @name HttpAdapter#fetch + * @name Adapter#create * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. - * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. - * @param {string} config.url Url for the request. + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} */ - fetch: function (_fetch) { - function fetch(_x, _x2) { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function (config, opts) { - var requestConfig = { - method: config.method, - // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) - }; - - if (config.data) { - requestConfig.body = _jsData.utils.toJson(config.data); - } - - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { - response.config = { - method: config.method, - url: config.url - }; - return response.json().then(function (data) { - response.data = data; - return response; + create: function create(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'create'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = babelHelpers.slicedToArray(results, 2); + + var data = _results2[0]; + var result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = self.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); }); - }), - - + }, + + /** - * Retrieve the record with the given primary key. + * Create multiple records in a single batch. Called by `Mapper#createMany`. * - * @name HttpAdapter#find + * @name Adapter#createMany * @method * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} props The records to be created. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ - find: function find(mapper, id, opts) { + createMany: function createMany(mapper, props, opts) { var self = this; + var op = void 0; + props || (props = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'createMany'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = babelHelpers.slicedToArray(results, 2); + + var data = _results3[0]; + var result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = self.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * Retrieve the records that match the selection `query`. + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. * - * @name HttpAdapter#findAll + * @name Adapter#destroy * @method * @param {Object} mapper The mapper. - * @param {Object} query Selection query. + * @param {(string|number)} id Primary key of the record to destroy. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ - findAll: function findAll(mapper, query, opts) { + destroy: function destroy(mapper, id, opts) { var self = this; - query || (query = {}); + var op = void 0; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = babelHelpers.slicedToArray(results, 2); + + var data = _results4[0]; + var result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = self.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * TODO + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. * - * @name HttpAdapter#GET + * @name Adapter#destroyAll * @method - * @param {string} url The url for the request. - * @param {Object} config Request configuration options. + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ - GET: function GET(url, config, opts) { + destroyAll: function destroyAll(mapper, query, opts) { var self = this; var op = void 0; - config || (config = {}); + query || (query = {}); opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'get'; - - // beforeGET lifecycle hook - op = opts.op = 'beforeGET'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterGET lifecycle hook - op = opts.op = 'afterGET'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = babelHelpers.slicedToArray(results, 2); + + var data = _results5[0]; + var result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = self.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); }); }, - - + + /** - * @name HttpAdapter#getEndpoint + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO - * @return {string} Full path. + * @return {Promise} */ - getEndpoint: function getEndpoint(mapper, id, opts) { + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { var self = this; - opts || (opts = {}); - opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; - var relationList = mapper.relationList || []; - var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; - - relationList.forEach(function (def) { - if (def.type !== 'belongsTo' || !def.parent) { - return; - } - var item = void 0; - var parentKey = def.foreignKey; - var parentDef = def.getRelation(); - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete opts.params[parentKey]; - } - return false; - } else { - delete opts.params[parentKey]; - - if (_jsData.utils.isObject(id)) { - item = id; - } - - if (item) { - parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); - } - - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - _jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - _jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - } - }); - - return endpoint; + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var _ret = function () { + var record = records; + return { + v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }) + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } else { + var keys = records.map(function (record) { + return self.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return self.findAll(relationDef, { + where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } }, - - + + /** - * @name HttpAdapter#getPath + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO - * @param {Object} opts Configuration options. + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} */ - getPath: function getPath(method, mapper, id, opts) { + find: function find(mapper, id, opts) { var self = this; + var record = void 0, + op = void 0; opts || (opts = {}); - var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(_jsData.utils, args); - }, - getParams: function getParams(opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.params)) { - return {}; - } - return _jsData.utils.copy(opts.params); - }, - getSuffix: function getSuffix(mapper, opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.suffix)) { - if (_jsData.utils.isUndefined(mapper.suffix)) { - return this.suffix; + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._find(mapper, id, opts)); + }).then(function (results) { + var _results6 = babelHelpers.slicedToArray(results, 1); + + var _record = _results6[0]; + + if (!_record) { + return; } - return mapper.suffix; - } - return opts.suffix; + record = _record; + var tasks = []; + + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = self.loadHasOne(mapper, def, record, __opts); + } else { + task = self.loadHasMany(mapper, def, record, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, record, __opts); + } + if (task) { + tasks.push(task); + } + }); + + return Promise.all(tasks); + }).then(function () { + var response = new Response(record, {}, 'find'); + response.found = record ? 1 : 0; + response = self.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * Make an Http request. + * Retrieve the records that match the selection query. * - * @name HttpAdapter#HTTP + * @name Adapter#findAll * @method - * @param {Object} config Request configuration options. + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. * @return {Promise} */ - HTTP: function HTTP(config, opts) { + findAll: function findAll(mapper, query, opts) { var self = this; - var start = new Date(); opts || (opts = {}); - var payload = config.data; - var cache = config.cache; - var timeout = config.timeout; - config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = _jsData.utils.deepMixIn(config, self.httpConfig); - config.data = payload; - config.cache = cache; - config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - - function logResponse(data) { - var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); - } - return data; + opts.with || (opts.with = []); + + var records = []; + var op = void 0; + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); - } - return _jsData.utils.reject(data); + jsData.utils.deepFillIn(query, activeQuery); } } - - if (!self.http) { - throw new Error('You have not configured this adapter with an http library!'); - } - - return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { - config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); - } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._findAll(mapper, query, opts)); + }).then(function (results) { + var _results7 = babelHelpers.slicedToArray(results, 1); + + var _records = _results7[0]; + + _records || (_records = []); + records = _records; + var tasks = []; + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasMany') { + task = self.loadHasMany(mapper, def, records, __opts); + } else { + task = self.loadHasOne(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } }); - }).then(function (response) { - return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; + return Promise.all(tasks); + }).then(function () { + var response = new Response(records, {}, 'findAll'); + response.found = records.length; + response = self.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); }); }, - - + + /** - * TODO + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. * - * @name HttpAdapter#POST + * @name Adapter#getOpt * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {string} opt The name of the option. * @param {Object} [opts] Configuration options. - * @return {Promise} + * @return {*} The value of the specified option. */ - POST: function POST(url, data, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); + getOpt: function getOpt(opt, opts) { opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'post'; - - // beforePOST lifecycle hook - op = opts.op = 'beforePOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPOST lifecycle hook - op = opts.op = 'afterPOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); + return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); }, - - + + /** - * TODO + * Load a hasMany relationship. * - * @name HttpAdapter#PUT + * Override with care. + * + * @name Adapter#loadHasMany * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO - * @param {Object} [opts] Configuration options. * @return {Promise} */ - PUT: function PUT(url, data, config, opts) { + loadHasMany: function loadHasMany(mapper, def, records, __opts) { var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'put'; - - // beforePUT lifecycle hook - op = opts.op = 'beforePUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPUT lifecycle hook - op = opts.op = 'afterPUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return self.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); }); }); }, - - + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var self = this; + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': self.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var _ret2 = function () { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + }); + return { + v: self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }) + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var self = this; + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(def.getRelation(), { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'contains': self.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return self.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + /** - * TODO + * Load a hasOne relationship. * - * @name HttpAdapter#queryTransform + * Override with care. + * + * @name Adapter#loadHasOne * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO - * @return {*} Transformed params. + * @return {Promise} */ - queryTransform: function queryTransform(mapper, params, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.queryTransform)) { - return opts.queryTransform(mapper, params, opts); - } - if (_jsData.utils.isFunction(mapper.queryTransform)) { - return mapper.queryTransform(mapper, params, opts); + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; } - return params; + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); }, - - + + /** - * Error handler invoked when the promise returned by {@link HttpAdapter#http} - * is rejected. Default implementation is to just return the error wrapped in - * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is - * called by {@link HttpAdapter#HTTP}. + * Logging utility method. Override this method if you want to send log + * messages to something other than the console. * - * @name HttpAdapter#responseError + * @name Adapter#log * @method - * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. - * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. - * @return {Promise} + * @param {string} level Log level. + * @param {...*} values Values to log. */ - responseError: function responseError(err, config, opts) { - return _jsData.utils.reject(err); + log: function log(level) { + for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + if (level && !args.length) { + args.push(level); + level = 'debug'; + } + if (level === 'debug' && !this.debug) { + return; + } + var prefix = level.toUpperCase() + ': (Adapter)'; + if (console[level]) { + var _console; + + (_console = console)[level].apply(_console, [prefix].concat(args)); + } else { + var _console2; + + (_console2 = console).log.apply(_console2, [prefix].concat(args)); + } }, - - + + /** - * TODO + * Return the foreignKey from the given record for the provided relationship. * - * @name HttpAdapter#serialize + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO - * @return {*} Serialized data. + * @return {*} */ - serialize: function serialize(mapper, data, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.serialize)) { - return opts.serialize(mapper, data, opts); - } - if (_jsData.utils.isFunction(mapper.serialize)) { - return mapper.serialize(mapper, data, opts); - } - return data; + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); }, - - + + /** - * Retrieve the sum of the field of the records that match the selection query. + * Return the localKeys from the given record for the provided relationship. * - * @name HttpAdapter#sum + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum * @method * @param {Object} mapper The mapper. - * @param {string} field The field to sum. - * @param {Object} query Selection query. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ sum: function sum(mapper, field, query, opts) { var self = this; - query || (query = {}); - opts || (opts = {}); - if (!_jsData.utils.utils.isString(field)) { + var op = void 0; + if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); } - opts.params = self.getParams(opts); - opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + self.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results8 = babelHelpers.slicedToArray(results, 2); + + var data = _results8[0]; + var result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * TODO + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. * - * @name HttpAdapter#update + * @name Adapter#update * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ update: function update(mapper, id, props, opts) { var self = this; + props || (props = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'update'; + self.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(self._update(mapper, id, props, opts)); + }).then(function (results) { + var _results9 = babelHelpers.slicedToArray(results, 2); + + var data = _results9[0]; + var result = _results9[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = self.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * TODO + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. * - * @name HttpAdapter#updateAll + * @name Adapter#updateAll * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { var self = this; + props || (props = {}); query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'updateAll'; + self.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results10 = babelHelpers.slicedToArray(results, 2); + + var data = _results10[0]; + var result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); }, - - + + /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. + * Update the given records in a single batch. Called by `Mapper#updateMany`. * - * @name HttpAdapter#updateMany + * @name Adapter#updateMany * @method * @param {Object} mapper The mapper. - * @param {Array} records Array of property objects to send as the payload. + * @param {Object[]} records The records to update. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { var self = this; + records || (records = []); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = jsData.utils.isUndefined(_records) ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results11 = babelHelpers.slicedToArray(results, 2); + + var data = _results11[0]; + var result = _results11[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); } }); - - /** - * Add an Http actions to a mapper. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * // GET /reports/schools/:school_id/teachers - * addAction('getTeacherReports', { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) - * - * @name module:js-data-http.addAction - * @method - * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - exports.addAction = function addAction(name, opts) { - if (!name || !_jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + + var hasFetch = false; + + try { + hasFetch = window && window.fetch; + } catch (e) {} + + function isValidString(value) { + return value != null && value !== ''; + } + function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); + } + function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; } - return function (mapper) { - if (mapper[name]) { - throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + } + + function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; } - opts.request = opts.request || function (config) { - return config; - }; - opts.response = opts.response || function (response) { - return response; - }; - opts.responseError = opts.responseError || function (err) { - return _jsData.utils.reject(err); - }; - mapper[name] = function (id, _opts) { - var self = this; - if (_jsData.utils.isObject(id)) { - _opts = id; - } - _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); - var config = {}; - _jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } - if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); - } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; - if (_jsData.utils.isSorN(id)) { - args.push(id); - } - args.push(opts.pathname || name); - config.url = makePath.apply(null, args); + if (!jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (jsData.utils.isObject(v)) { + v = jsData.utils.toJson(v); } - config.method = config.method || 'GET'; - config.mapper = self.name; - _jsData.utils.deepMixIn(config, _opts); - return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.mapper = self.name; - } - return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); - }; - return mapper; - }; + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var __super__ = Adapter.prototype; + + var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios$1, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false }; - + /** - * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for - * action configuration options. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * addActions({ - * // GET /reports/schools/:school_id/teachers - * getTeacherReports: { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * } - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) + * HttpAdapter class. * - * @name module:js-data-http.addActions - * @method - * @param {Object.} opts Object where the key is an action name - * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO */ - exports.addActions = function addActions(opts) { + function HttpAdapter(opts) { + var self = this; opts || (opts = {}); - return function (mapper) { - _jsData.utils.forOwn(opts, function (value, key) { - exports.addAction(key, value)(mapper); - }); - return mapper; - }; - }; - + jsData.utils.fillIn(opts, DEFAULTS); + Adapter.call(self, opts); + } + /** - * Details of the current version of the `js-data-http` module. - * - * @name module:js-data-http.version - * @type {Object} - * @property {string} version.full The full semver value. - * @property {number} version.major The major version number. - * @property {number} version.minor The minor version number. - * @property {number} version.patch The patch version number. - * @property {(string|boolean)} version.alpha The alpha version value, - * otherwise `false` if the current version is not alpha. - * @property {(string|boolean)} version.beta The beta version value, - * otherwise `false` if the current version is not beta. + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter */ - exports.version = { - beta: 5, - full: '3.0.0-beta.5', - major: 3, - minor: 0, - patch: 0 -}; - + + // Setup prototype inheritance from Adapter + HttpAdapter.prototype = Object.create(Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } + }); + + Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: Adapter + }); + /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() + * Alternative to ES6 class syntax for extending `HttpAdapter`. * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} * - * // ... - * }) + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() * - * @module js-data-http + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. */ - exports.default = HttpAdapter; - -/***/ }, -/* 1 */ -/***/ function(module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_1__; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - (function (global, factory) { - true ? factory(exports, __webpack_require__(1)) : - typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : - (factory((global.Adapter = global.Adapter || {}),global.JSData)); - }(this, function (exports,jsData) { 'use strict'; - - var babelHelpers = {}; - babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; - - babelHelpers.defineProperty = function (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; - }; - - babelHelpers.slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (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"); - } - }; - }(); - - babelHelpers; - - var noop = function noop() { - var self = this; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var opts = args[args.length - 1]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var noop2 = function noop2() { - var self = this; - - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var opts = args[args.length - 2]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var unique = function unique(array) { - var seen = {}; - var final = []; - array.forEach(function (item) { - if (item in seen) { - return; - } - final.push(item); - seen[item] = 0; - }); - return final; - }; - - var withoutRelations = function withoutRelations(mapper, props) { - return jsData.utils.omit(props, mapper.relationFields || []); - }; - - var DEFAULTS = { - /** - * Whether to log debugging information. - * - * @name Adapter#debug - * @type {boolean} - * @default false - */ - debug: false, - - /** - * Whether to return a more detailed response object. - * - * @name Adapter#raw - * @type {boolean} - * @default false - */ - raw: false - }; - - /** - * Abstract class meant to be extended by adapters. - * - * @class Adapter - * @abstract - * @param {Object} [opts] Configuration opts. - * @param {boolean} [opts.debug=false] Whether to log debugging information. - * @param {boolean} [opts.raw=false] Whether to return a more detailed response - * object. - */ - function Adapter(opts) { - var self = this; - opts || (opts = {}); - jsData.utils.fillIn(opts, DEFAULTS); - jsData.utils.fillIn(self, opts); - } - - var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - var self = this; - meta || (meta = {}); - - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - self.data = data; - - jsData.utils.fillIn(self, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - self.op = op; - } - + HttpAdapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { /** - * Alternative to ES6 class syntax for extending `Adapter`. - * - * @name Adapter.extend + * @name HttpAdapter#afterDEL * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `Adapter`. + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response */ - Adapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#afterCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} props The `props` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `afterCount` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterCount: noop2, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `afterCreate` - * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreate: noop2, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `afterCreateMany` - * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreateMany: noop2, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#afterDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `afterDestroy` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroy: noop2, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#afterDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `afterDestroyAll` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroyAll: noop2, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#afterFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `afterFind` - * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. - */ - afterFind: noop2, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#afterFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `afterFindAll` - * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. - */ - afterFindAll: noop2, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#afterSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {string} field The `field` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `afterSum` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterSum: noop2, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#afterUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `afterUpdate` - * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdate: noop2, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#afterUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `afterUpdateAll` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateAll: noop2, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#afterUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} records The `records` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `afterUpdateMany` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateMany: noop2, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#beforeCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} query The `query` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `beforeCount` - */ - beforeCount: noop, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#beforeCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `beforeCreate` - */ - beforeCreate: noop, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#beforeCreateMany - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `beforeCreateMany` - */ - beforeCreateMany: noop, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#beforeDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `beforeDestroy` - */ - beforeDestroy: noop, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#beforeDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `beforeDestroyAll` - */ - beforeDestroyAll: noop, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#beforeFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `beforeFind` - */ - beforeFind: noop, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#beforeFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `beforeFindAll` - */ - beforeFindAll: noop, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#beforeSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `beforeSum` - */ - beforeSum: noop, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#beforeUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `beforeUpdate` - */ - beforeUpdate: noop, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#beforeUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `beforeUpdateAll` - */ - beforeUpdateAll: noop, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#beforeUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} props The `props` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `beforeUpdateMany` - */ - beforeUpdateMany: noop, - - /** - * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. - * - * @name Adapter#dbg - * @method - */ - dbg: function dbg() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['debug'].concat(args)); - }, - - - /** - * Retrieve the number of records that match the selection query. Called by - * `Mapper#count`. - * - * @name Adapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeCount lifecycle hook - op = opts.op = 'beforeCount'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'count'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._count(mapper, query, opts)); - }).then(function (results) { - var _results = babelHelpers.slicedToArray(results, 2); - - var data = _results[0]; - var result = _results[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterCount lifecycle hook - op = opts.op = 'afterCount'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create a new record. Called by `Mapper#create`. - * - * @name Adapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The record to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreate lifecycle hook - op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'create'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._create(mapper, props, opts)); - }).then(function (results) { - var _results2 = babelHelpers.slicedToArray(results, 2); - - var data = _results2[0]; - var result = _results2[1]; - - result || (result = {}); - var response = new Response(data, result, 'create'); - response.created = data ? 1 : 0; - response = self.respond(response, opts); - - // afterCreate lifecycle hook - op = opts.op = 'afterCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create multiple records in a single batch. Called by `Mapper#createMany`. - * - * @name Adapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The records to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreateMany lifecycle hook - op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = props.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'createMany'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._createMany(mapper, props, opts)); - }).then(function (results) { - var _results3 = babelHelpers.slicedToArray(results, 2); - - var data = _results3[0]; - var result = _results3[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'createMany'); - response.created = data.length; - response = self.respond(response, opts); - - // afterCreateMany lifecycle hook - op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the record with the given primary key. Called by - * `Mapper#destroy`. - * - * @name Adapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var self = this; - var op = void 0; - opts || (opts = {}); - - // beforeDestroy lifecycle hook - op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'destroy'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._destroy(mapper, id, opts)); - }).then(function (results) { - var _results4 = babelHelpers.slicedToArray(results, 2); - - var data = _results4[0]; - var result = _results4[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroy'); - response = self.respond(response, opts); - - // afterDestroy lifecycle hook - op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the records that match the selection query. Called by - * `Mapper#destroyAll`. - * - * @name Adapter#destroyAll - * @method - * @param {Object} mapper the mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeDestroyAll lifecycle hook - op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'destroyAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); - }).then(function (results) { - var _results5 = babelHelpers.slicedToArray(results, 2); - - var data = _results5[0]; - var result = _results5[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroyAll'); - response = self.respond(response, opts); - - // afterDestroyAll lifecycle hook - op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Load a belongsTo relationship. - * - * Override with care. - * - * @name Adapter#loadBelongsTo - * @method - * @return {Promise} - */ - loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var self = this; - var relationDef = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - var _ret = function () { - var record = records; - return { - v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { - def.setLocalField(record, relatedItem); - }) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; - } else { - var keys = records.map(function (record) { - return self.makeBelongsToForeignKey(mapper, def, record); - }).filter(function (key) { - return key; - }); - return self.findAll(relationDef, { - where: babelHelpers.defineProperty({}, relationDef.idAttribute, { - 'in': keys - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (record) { - relatedItems.forEach(function (relatedItem) { - if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { - def.setLocalField(record, relatedItem); - } - }); - }); - }); - } - }, - - - /** - * Retrieve the record with the given primary key. Called by `Mapper#find`. - * - * @name Adapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var self = this; - var record = void 0, - op = void 0; - opts || (opts = {}); - opts.with || (opts.with = []); - - // beforeFind lifecycle hook - op = opts.op = 'beforeFind'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'find'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._find(mapper, id, opts)); - }).then(function (results) { - var _results6 = babelHelpers.slicedToArray(results, 1); - - var _record = _results6[0]; - - if (!_record) { - return; - } - record = _record; - var tasks = []; - - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasOne') { - task = self.loadHasOne(mapper, def, record, __opts); - } else { - task = self.loadHasMany(mapper, def, record, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, record, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, record, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, record, __opts); - } - if (task) { - tasks.push(task); - } - }); - - return Promise.all(tasks); - }).then(function () { - var response = new Response(record, {}, 'find'); - response.found = record ? 1 : 0; - response = self.respond(response, opts); - - // afterFind lifecycle hook - op = opts.op = 'afterFind'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Retrieve the records that match the selection query. - * - * @name Adapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var self = this; - opts || (opts = {}); - opts.with || (opts.with = []); - - var records = []; - var op = void 0; - var activeWith = opts._activeWith; - - if (jsData.utils.isObject(activeWith)) { - var activeQuery = activeWith.query || {}; - if (activeWith.replace) { - query = activeQuery; - } else { - jsData.utils.deepFillIn(query, activeQuery); - } - } - - // beforeFindAll lifecycle hook - op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'findAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._findAll(mapper, query, opts)); - }).then(function (results) { - var _results7 = babelHelpers.slicedToArray(results, 1); - - var _records = _results7[0]; - - _records || (_records = []); - records = _records; - var tasks = []; - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasMany') { - task = self.loadHasMany(mapper, def, records, __opts); - } else { - task = self.loadHasOne(mapper, def, records, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, records, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, records, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, records, __opts); - } - if (task) { - tasks.push(task); - } - }); - return Promise.all(tasks); - }).then(function () { - var response = new Response(records, {}, 'findAll'); - response.found = records.length; - response = self.respond(response, opts); - - // afterFindAll lifecycle hook - op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Resolve the value of the specified option based on the given options and - * this adapter's settings. Override with care. - * - * @name Adapter#getOpt - * @method - * @param {string} opt The name of the option. - * @param {Object} [opts] Configuration options. - * @return {*} The value of the specified option. - */ - getOpt: function getOpt(opt, opts) { - opts || (opts = {}); - return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); - }, - - - /** - * Load a hasMany relationship. - * - * Override with care. - * - * @name Adapter#loadHasMany - * @method - * @return {Promise} - */ - loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var self = this; - var singular = false; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - singular = true; - records = [records]; - } - var IDs = records.map(function (record) { - return self.makeHasManyForeignKey(mapper, def, record); + afterDEL: noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); - var query = { - where: {} + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url }; - var criteria = query.where[def.foreignKey] = {}; - if (singular) { - // more efficient query when we only have one record - criteria['=='] = IDs[0]; - } else { - criteria['in'] = IDs.filter(function (id) { - return id; - }); - } - return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { - records.forEach(function (record) { - var attached = []; - // avoid unneccesary iteration when we only have one record - if (singular) { - attached = relatedItems; - } else { - relatedItems.forEach(function (relatedItem) { - if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { - attached.push(relatedItem); - } - }); - } - def.setLocalField(record, attached); - }); + return response.json().then(function (data) { + response.data = data; + return response; }); - }, - loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var self = this; - var record = void 0; - var relatedMapper = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - - if (record) { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': self.makeHasManyLocalKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - var _ret2 = function () { - var localKeys = []; - records.forEach(function (record) { - localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); - }); - return { - v: self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': unique(localKeys).filter(function (x) { - return x; - }) - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (item) { - var attached = []; - var itemKeys = jsData.utils.get(item, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - relatedItems.forEach(function (relatedItem) { - if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { - attached.push(relatedItem); - } - }); - def.setLocalField(item, attached); - }); - return relatedItems; - }) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; - } - }, - loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var self = this; - var relatedMapper = def.getRelation(); - var idAttribute = mapper.idAttribute; - var record = void 0; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; } - - if (record) { - return self.findAll(def.getRelation(), { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'contains': self.makeHasManyForeignKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; } else { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'isectNotEmpty': records.map(function (record) { - return self.makeHasManyForeignKeys(mapper, def, record); - }) - }) - }, __opts).then(function (relatedItems) { - var foreignKeysField = def.foreignKeys; - records.forEach(function (record) { - var _relatedItems = []; - var id = jsData.utils.get(record, idAttribute); - relatedItems.forEach(function (relatedItem) { - var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; - if (foreignKeys.indexOf(id) !== -1) { - _relatedItems.push(relatedItem); - } + delete opts.params[parentKey]; + + if (jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; }); - def.setLocalField(record, _relatedItems); - }); - }); - } - }, - - - /** - * Load a hasOne relationship. - * - * Override with care. - * - * @name Adapter#loadHasOne - * @method - * @return {Promise} - */ - loadHasOne: function loadHasOne(mapper, def, records, __opts) { - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - records = [records]; - } - return this.loadHasMany(mapper, def, records, __opts).then(function () { - records.forEach(function (record) { - var relatedData = def.getLocalField(record); - if (jsData.utils.isArray(relatedData) && relatedData.length) { - def.setLocalField(record, relatedData[0]); - } - }); - }); - }, - - - /** - * Logging utility method. Override this method if you want to send log - * messages to something other than the console. - * - * @name Adapter#log - * @method - * @param {string} level Log level. - * @param {...*} values Values to log. - */ - log: function log(level) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - if (level && !args.length) { - args.push(level); - level = 'debug'; + jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } } - if (level === 'debug' && !this.debug) { - return; + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.params)) { + return {}; + } + return jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.suffix)) { + if (jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; } - var prefix = level.toUpperCase() + ': (Adapter)'; - if (console[level]) { - var _console; - - (_console = console)[level].apply(_console, [prefix].concat(args)); + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; } else { - var _console2; - - (_console2 = console).log.apply(_console2, [prefix].concat(args)); + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return jsData.utils.reject(data); } - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * There may be reasons why you may want to override this method, like when - * the id of the parent doesn't exactly match up to the key on the child. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKey - * @method - * @return {*} - */ - makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Return the localKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyLocalKeys - * @method - * @return {*} - */ - makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { - var localKeys = []; - var itemKeys = jsData.utils.get(record, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - localKeys = localKeys.concat(itemKeys); - return unique(localKeys).filter(function (x) { - return x; - }); - }, - - - /** - * Return the foreignKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKeys - * @method - * @return {*} - */ - makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { - return jsData.utils.get(record, mapper.idAttribute); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeBelongsToForeignKey - * @method - * @return {*} - */ - makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Retrieve sum of the specified field of the records that match the selection - * query. Called by `Mapper#sum`. - * - * @name Adapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field By to sum. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var self = this; - var op = void 0; - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); } - query || (query = {}); - opts || (opts = {}); - - // beforeSum lifecycle hook - op = opts.op = 'beforeSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'sum'; - self.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(self._sum(mapper, field, query, opts)); - }).then(function (results) { - var _results8 = babelHelpers.slicedToArray(results, 2); - - var data = _results8[0]; - var result = _results8[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterSum lifecycle hook - op = opts.op = 'afterSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * @name Adapter#respond - * @method - * @param {Object} response Response object. - * @param {Object} opts Configuration options. - * return {Object} If `opts.raw == true` then return `response`, else return - * `response.data`. - */ - respond: function respond(response, opts) { - return this.getOpt('raw', opts) ? response : response.data; - }, - - - /** - * Apply the given update to the record with the specified primary key. Called - * by `Mapper#update`. - * - * @name Adapter#update - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id The primary key of the record to be updated. - * @param {Object} props The update to apply to the record. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var self = this; - props || (props = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdate lifecycle hook - op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'update'; - self.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(self._update(mapper, id, props, opts)); - }).then(function (results) { - var _results9 = babelHelpers.slicedToArray(results, 2); - - var data = _results9[0]; - var result = _results9[1]; - - result || (result = {}); - var response = new Response(data, result, 'update'); - response.updated = data ? 1 : 0; - response = self.respond(response, opts); - - // afterUpdate lifecycle hook - op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); }); - }, - - - /** - * Apply the given update to all records that match the selection query. - * Called by `Mapper#updateAll`. - * - * @name Adapter#updateAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The update to apply to the selected records. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var self = this; - props || (props = {}); - query || (query = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdateAll lifecycle hook - op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'updateAll'; - self.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); - }).then(function (results) { - var _results10 = babelHelpers.slicedToArray(results, 2); - - var data = _results10[0]; - var result = _results10[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateAll'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateAll lifecycle hook - op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); + }).then(function (response) { + return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; }); - }, - - - /** - * Update the given records in a single batch. Called by `Mapper#updateMany`. - * - * @name Adapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Object[]} records The records to update. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var self = this; - records || (records = []); - opts || (opts = {}); - var op = void 0; - var idAttribute = mapper.idAttribute; - - records = records.filter(function (record) { - return jsData.utils.get(record, idAttribute); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); - - // beforeUpdateMany lifecycle hook - op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { - // Allow for re-assignment from lifecycle hook - records = jsData.utils.isUndefined(_records) ? records : _records; - records = records.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'updateMany'; - self.dbg(op, mapper, records, opts); - return jsData.utils.resolve(self._updateMany(mapper, records, opts)); - }).then(function (results) { - var _results11 = babelHelpers.slicedToArray(results, 2); - - var data = _results11[0]; - var result = _results11[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateMany'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateMany lifecycle hook - op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); } - }); - - exports.noop = noop; - exports.noop2 = noop2; - exports.unique = unique; - exports.withoutRelations = withoutRelations; - exports.Adapter = Adapter; - exports.reserved = reserved; - exports.Response = Response; - - })); - //# sourceMappingURL=js-data-adapter.js.map - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(4); - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var defaults = __webpack_require__(5); - var utils = __webpack_require__(6); - var dispatchRequest = __webpack_require__(7); - var InterceptorManager = __webpack_require__(17); - var isAbsoluteURL = __webpack_require__(18); - var combineURLs = __webpack_require__(19); - var bind = __webpack_require__(20); - var transformData = __webpack_require__(12); - - function Axios(defaultConfig) { - this.defaults = utils.merge({}, defaultConfig); - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; - } - - Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = utils.merge({ - url: arguments[0] - }, arguments[1]); - } - - config = utils.merge(defaults, this.defaults, { method: 'get' }, config); - - // Support baseURL config - if (config.baseURL && !isAbsoluteURL(config.url)) { - config.url = combineURLs(config.baseURL, config.url); - } - - // Don't allow overriding defaults.withCredentials - config.withCredentials = config.withCredentials || this.defaults.withCredentials; - - // Transform request data - config.data = transformData( - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers || {} - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; + if (jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); } - ); - - // Hook up interceptors middleware - var chain = [dispatchRequest, undefined]; - var promise = Promise.resolve(config); - - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - chain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - chain.push(interceptor.fulfilled, interceptor.rejected); - }); - - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - - return promise; - }; - - var defaultInstance = new Axios(defaults); - var axios = module.exports = bind(Axios.prototype.request, defaultInstance); - - // Expose properties from defaultInstance - axios.defaults = defaultInstance.defaults; - axios.interceptors = defaultInstance.interceptors; - - // Factory for creating new instances - axios.create = function create(defaultConfig) { - return new Axios(defaultConfig); - }; - - // Expose all/spread - axios.all = function all(promises) { - return Promise.all(promises); - }; - axios.spread = __webpack_require__(21); - - // Provide aliases for supported request methods - utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url - })); - }; - axios[method] = bind(Axios.prototype[method], defaultInstance); - }); - - utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url, - data: data - })); - }; - axios[method] = bind(Axios.prototype[method], defaultInstance); - }); + return params; + }, + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return jsData.utils.reject(err); + }, -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - 'use strict'; - - var utils = __webpack_require__(6); - - var PROTECTION_PREFIX = /^\)\]\}',?\n/; - var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - - module.exports = { - transformRequest: [function transformRequest(data, headers) { - if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) { - // Set application/json if no Content-Type has been specified - if (!utils.isUndefined(headers)) { - utils.forEach(headers, function processContentTypeHeader(val, key) { - if (key.toLowerCase() === 'content-type') { - headers['Content-Type'] = val; - } - }); - - if (utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = 'application/json;charset=utf-8'; - } - } - return JSON.stringify(data); + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); } - return data; - }], - - transformResponse: [function transformResponse(data) { - /*eslint no-param-reassign:0*/ - if (typeof data === 'string') { - data = data.replace(PROTECTION_PREFIX, ''); - try { - data = JSON.parse(data); - } catch (e) { /* Ignore */ } + if (jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); } return data; - }], - - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - patch: utils.merge(DEFAULT_CONTENT_TYPE), - post: utils.merge(DEFAULT_CONTENT_TYPE), - put: utils.merge(DEFAULT_CONTENT_TYPE) }, - - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - } - }; -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - 'use strict'; - - /*global toString:true*/ - - // utils is a library of generic helper functions non-specific to axios - - var toString = Object.prototype.toString; - - /** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ - function isArray(val) { - return toString.call(val) === '[object Array]'; - } - - /** - * Determine if a value is an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ - function isArrayBuffer(val) { - return toString.call(val) === '[object ArrayBuffer]'; - } - - /** - * Determine if a value is a FormData - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ - function isFormData(val) { - return toString.call(val) === '[object FormData]'; - } - - /** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ - function isArrayBufferView(val) { - var result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); - } - return result; - } - - /** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ - function isString(val) { - return typeof val === 'string'; - } - - /** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ - function isNumber(val) { - return typeof val === 'number'; - } - - /** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ - function isUndefined(val) { - return typeof val === 'undefined'; - } - - /** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ - function isObject(val) { - return val !== null && typeof val === 'object'; - } - - /** - * Determine if a value is a Date - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ - function isDate(val) { - return toString.call(val) === '[object Date]'; - } - - /** - * Determine if a value is a File - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ - function isFile(val) { - return toString.call(val) === '[object File]'; - } - - /** - * Determine if a value is a Blob - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ - function isBlob(val) { - return toString.call(val) === '[object Blob]'; - } - - /** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ - function isFunction(val) { - return toString.call(val) === '[object Function]'; - } - - /** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ - function isStream(val) { - return isObject(val) && isFunction(val.pipe); - } - - /** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ - function trim(str) { - return str.replace(/^\s*/, '').replace(/\s*$/, ''); - } - - /** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * typeof document.createElement -> undefined - */ - function isStandardBrowserEnv() { - return ( - typeof window !== 'undefined' && - typeof document !== 'undefined' && - typeof document.createElement === 'function' - ); - } - - /** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ - function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (typeof obj !== 'object' && !isArray(obj)) { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - fn.call(null, obj[key], key, obj); - } - } - } - } - - /** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ - function merge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (typeof result[key] === 'object' && typeof val === 'object') { - result[key] = merge(result[key], val); - } else { - result[key] = val; + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; - } - - module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - trim: trim - }; + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + return __super__.sum.call(self, mapper, field, query, opts); + }, -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - /** - * Dispatch a request to the server using whichever adapter - * is supported by the current environment. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ - module.exports = function dispatchRequest(config) { - return new Promise(function executor(resolve, reject) { - try { - var adapter; - - if (typeof config.adapter === 'function') { - // For custom adapter support - adapter = config.adapter; - } else if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __webpack_require__(9); - } else if (typeof process !== 'undefined') { - // For node use HTTP adapter - adapter = __webpack_require__(9); - } - - if (typeof adapter === 'function') { - adapter(resolve, reject, config); - } - } catch (e) { - reject(e); - } - }); - }; - - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8))) - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - - // shim for using process in browser - - var process = module.exports = {}; - var queue = []; - var draining = false; - var currentQueue; - var queueIndex = -1; - - function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } - } - - function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); - } - - process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } - }; - - // v8 likes predictible objects - function Item(fun, array) { - this.fun = fun; - this.array = array; - } - Item.prototype.run = function () { - this.fun.apply(null, this.array); - }; - process.title = 'browser'; - process.browser = true; - process.env = {}; - process.argv = []; - process.version = ''; // empty string to avoid regexp issues - process.versions = {}; - - function noop() {} - - process.on = noop; - process.addListener = noop; - process.once = noop; - process.off = noop; - process.removeListener = noop; - process.removeAllListeners = noop; - process.emit = noop; - - process.binding = function (name) { - throw new Error('process.binding is not supported'); - }; - - process.cwd = function () { return '/' }; - process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); - }; - process.umask = function() { return 0; }; - - -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - var utils = __webpack_require__(6); - var buildURL = __webpack_require__(10); - var parseHeaders = __webpack_require__(11); - var transformData = __webpack_require__(12); - var isURLSameOrigin = __webpack_require__(13); - var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(14); - var settle = __webpack_require__(15); - - module.exports = function xhrAdapter(resolve, reject, config) { - var requestData = config.data; - var requestHeaders = config.headers; - - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - var loadEvent = 'onreadystatechange'; - var xDomain = false; - - // For IE 8/9 CORS support - // Only supports POST and GET calls and doesn't returns the response headers. - // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. - if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { - request = new window.XDomainRequest(); - loadEvent = 'onload'; - xDomain = true; - } - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password || ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - - request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - - // For IE 9 CORS support. - request.onprogress = function handleProgress() {}; - request.ontimeout = function handleTimeout() {}; - - // Listen for ready state - request[loadEvent] = function handleLoad() { - if (!request || (request.readyState !== 4 && !xDomain)) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - if (request.status === 0) { - return; - } - - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; - var response = { - data: transformData( - responseData, - responseHeaders, - config.transformResponse - ), - // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) - status: request.status === 1223 ? 204 : request.status, - statusText: request.status === 1223 ? 'No Content' : request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - - settle(resolve, reject, response); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(new Error('Network Error')); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - var err = new Error('timeout of ' + config.timeout + 'ms exceeded'); - err.timeout = config.timeout; - err.code = 'ECONNABORTED'; - reject(err); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - var cookies = __webpack_require__(16); - - // Add xsrf header - var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? - cookies.read(config.xsrfCookieName) : - undefined; - - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (config.withCredentials) { - request.withCredentials = true; - } - - // Add responseType to request if needed - if (config.responseType) { - try { - request.responseType = config.responseType; - } catch (e) { - if (request.responseType !== 'json') { - throw e; - } - } - } - - // Handle progress if needed - if (config.progress) { - if (config.method === 'post' || config.method === 'put') { - request.upload.addEventListener('progress', config.progress); - } else if (config.method === 'get') { - request.addEventListener('progress', config.progress); - } - } - - if (requestData === undefined) { - requestData = null; - } - - // Send the request - request.send(requestData); - }; - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8))) + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { + return __super__.update.call(self, mapper, id, props, opts); + }, - 'use strict'; - - var utils = __webpack_require__(6); - - function encode(val) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); - } - - /** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ - module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else { - var parts = []; - - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - - if (utils.isArray(val)) { - key = key + '[]'; - } - - if (!utils.isArray(val)) { - val = [val]; - } - - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - serializedParams = parts.join('&'); - } - - if (serializedParams) { - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; - }; - + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { + return __super__.updateAll.call(self, mapper, props, query, opts); + }, - 'use strict'; - - var utils = __webpack_require__(6); - - /** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ - module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - - if (!headers) { return parsed; } - - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - }); - - return parsed; - }; + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { + return __super__.updateMany.call(self, mapper, records, opts); + } + }); - 'use strict'; - - var utils = __webpack_require__(6); - /** - * Transform the data for a request or a response + * Add an Http actions to a mapper. + * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. */ - module.exports = function transformData(data, headers, fns) { - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn(data, headers); - }); - - return data; - }; - - -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(6); - - module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - (function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') ? - urlParsingNode.pathname : - '/' + urlParsingNode.pathname - }; + function addAction(name, opts) { + if (!name || !jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); } - - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; - return (parsed.protocol === originURL.protocol && - parsed.host === originURL.host); + opts.request = opts.request || function (config) { + return config; }; - })() : - - // Non standard browser envs (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; + opts.response = opts.response || function (response) { + return response; }; - })() - ); - - -/***/ }, -/* 14 */ -/***/ function(module, exports) { - - 'use strict'; - - // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js - - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - function E() { - this.message = 'String contains an invalid character'; - } - E.prototype = new Error; - E.prototype.code = 5; - E.prototype.name = 'InvalidCharacterError'; - - function btoa(input) { - var str = String(input); - var output = ''; - for ( - // initialize result and counter - var block, charCode, idx = 0, map = chars; - // if the next str index does not exist: - // change the mapping table to "=" - // check if d has no fractional digits - str.charAt(idx | 0) || (map = '=', idx % 1); - // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 - output += map.charAt(63 & block >> 8 - idx % 1 * 8) - ) { - charCode = str.charCodeAt(idx += 3 / 4); - if (charCode > 0xFF) { - throw new E(); - } - block = block << 8 | charCode; - } - return output; - } - - module.exports = btoa; - - -/***/ }, -/* 15 */ -/***/ function(module, exports) { - - 'use strict'; - - /** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ - module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - // Note: status is not exposed by XDomainRequest - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(response); - } - }; - - -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(6); - - module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - - if (utils.isString(path)) { - cookie.push('path=' + path); - } - - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - - if (secure === true) { - cookie.push('secure'); + opts.responseError = opts.responseError || function (err) { + return jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + if (jsData.utils.isSorN(id)) { + args.push(id); } - - document.cookie = cookie.join('; '); - }, - - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); } + config.method = config.method || 'GET'; + config.mapper = self.name; + jsData.utils.deepMixIn(config, _opts); + return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); }; - })() : - - // Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })() - ); - - -/***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(6); - - function InterceptorManager() { - this.handlers = []; + return mapper; + }; } - + /** - * Add a new interceptor to the stack + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore * - * @return {Number} An ID used to remove interceptor later - */ - InterceptorManager.prototype.use = function use(fulfilled, rejected) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected - }); - return this.handlers.length - 1; - }; - - /** - * Remove an interceptor from the stack + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions * - * @param {Number} id The ID that was returned by `use` - */ - InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } - }; - - /** - * Iterate over all the registered interceptors + * var adapter = new HttpAdapter() + * var store = new DataStore() * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') * - * @param {Function} fn The function to call for each interceptor - */ - InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); - }; - - module.exports = InterceptorManager; - - -/***/ }, -/* 18 */ -/***/ function(module, exports) { - - 'use strict'; - - /** - * Determines whether the specified URL is absolute + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. */ - module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); - }; - - -/***/ }, -/* 19 */ -/***/ function(module, exports) { + function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + jsData.utils.forOwn(opts, function (value, key) { + addAction(key, value)(mapper); + }); + return mapper; + }; + } - 'use strict'; - /** - * Creates a new URL by combining the specified URLs + * Details of the current version of the `js-data-http` module. * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. */ - module.exports = function combineURLs(baseURL, relativeURL) { - return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, ''); - }; - - -/***/ }, -/* 20 */ -/***/ function(module, exports) { - - 'use strict'; - - module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; - }; - - -/***/ }, -/* 21 */ -/***/ function(module, exports) { + var version = { + beta: 6, + full: '3.0.0-beta.6', + major: 3, + minor: 0, + patch: 0 +}; - 'use strict'; - /** - * Syntactic sugar for invoking a function and expanding an array for arguments. + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() * - * Common use case would be to use `Function.prototype.apply`. + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() * - * With `spread` this example can be re-written. + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` + * // ... + * }) * - * @param {Function} callback - * @returns {Function} + * @module js-data-http */ - module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; - }; + exports.HttpAdapter = HttpAdapter; + exports.addAction = addAction; + exports.addActions = addActions; + exports.version = version; -/***/ } -/******/ ]) -}); -; +})); //# sourceMappingURL=js-data-http.js.map \ No newline at end of file diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 19b7ad5..111e79d 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5ca3dba1258af7fede7c","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/transformData.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/settle.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/axios/lib/helpers/spread.js"],"names":[],"mappings":"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;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;ACtHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACjEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzQA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACnKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACjEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA","file":"./dist/js-data-http.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5ca3dba1258af7fede7c\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformRequest(data, headers) {\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 7\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // For IE 9 CORS support.\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n if (request.status === 0) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n err.timeout = config.timeout;\n err.code = 'ECONNABORTED';\n reject(err);\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (config.progress) {\n if (config.method === 'post' || config.method === 'put') {\n request.upload.addEventListener('progress', config.progress);\n } else if (config.method === 'get') {\n request.addEventListener('progress', config.progress);\n }\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/transformData.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(response);\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/settle.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 21\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js-data-http.js","sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.11.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(4);\n\tvar InterceptorManager = __webpack_require__(13);\n\tvar isAbsoluteURL = __webpack_require__(14);\n\tvar combineURLs = __webpack_require__(15);\n\tvar bind = __webpack_require__(16);\n\tvar transformData = __webpack_require__(8);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\tmodule.exports.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(17);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n\t // Set application/json if no Content-Type has been specified\n\t if (!utils.isUndefined(headers)) {\n\t utils.forEach(headers, function processContentTypeHeader(val, key) {\n\t if (key.toLowerCase() === 'content-type') {\n\t headers['Content-Type'] = val;\n\t }\n\t });\n\t\n\t if (utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = 'application/json;charset=utf-8';\n\t }\n\t }\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(5);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(5);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(6);\n\tvar parseHeaders = __webpack_require__(7);\n\tvar transformData = __webpack_require__(8);\n\tvar isURLSameOrigin = __webpack_require__(9);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10);\n\tvar settle = __webpack_require__(11);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(12);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\t\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props) {\n return utils.omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["this","utils","DEFAULTS","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 6a76dac..239bc5b 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.5 - Homepage +* @version 3.0.0-beta.6 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data")):"function"==typeof define&&define.amd?define(["js-data"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data")):e.JSDataHttp=t(e.JSData)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(r).join(t)}function i(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function a(e,t){if(!t)return e;var n=[];return l.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(l.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():l.utils.isObject(e)&&(e=l.utils.toJson(e)),n.push(u(t)+"="+u(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),l.utils.fillIn(e,y),c.Adapter.call(t,e)}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},l=n(1),c=n(2),d=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=c.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(c.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:c.Adapter}),s.extend=l.utils.extend,l.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:c.noop2,afterGET:c.noop2,afterHTTP:c.noop2,afterPOST:c.noop2,afterPUT:c.noop2,beforeDEL:c.noop,beforeGET:c.noop,beforeHTTP:c.noop,beforePOST:c.noop,beforePUT:c.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var o=this;return o.GET(o.getPath("sum",e,r.params,r),r).then(function(t){return o._end(e,r,t)})},_update:function(e,t,n,r){var o=this;return o.PUT(o.getPath("update",e,t,r),o.serialize(e,n,r),r).then(function(t){return o._end(e,r,t)})},_updateAll:function(e,t,n,r){var o=this;return o.PUT(o.getPath("updateAll",e,null,r),o.serialize(e,t,r),r).then(function(t){return o._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",o=n.op="beforeDEL",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="DEL",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterDEL",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},deserialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):l.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=l.utils.toJson(e.data)),fetch(new Request(a(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),l.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,o=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",o=n.op="beforeGET",l.utils.resolve(r[o](e,t,n)).then(function(i){return t=l.utils.isUndefined(i)?t:i,o=n.op="GET",r.dbg(o,e,t,n),r.HTTP(t,n)}).then(function(i){return o=n.op="afterGET",l.utils.resolve(r[o](e,t,n,i)).then(function(e){return l.utils.isUndefined(e)?i:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=l.utils.isUndefined(n.params)?{}:n.params;var o=e.relationList||[],u=l.utils.isUndefined(n.endpoint)?l.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,a=e.foreignKey,s=e.getRelation(),c=n.params[a];if(c===!1||!a||!s)return c===!1&&delete n.params[a],!1;if(delete n.params[a],l.utils.isObject(t)&&(o=t),o&&(c=c||e.getForeignKey(o)||(e.getLocalField(o)?l.utils.get(e.getLocalField(o),s.idAttribute):null)),c){var d=function(){delete n.endpoint;var e={};return l.utils.forOwn(n,function(t,n){e[n]=t}),l.utils._(e,s),u=i(r.getEndpoint(s,c,e),c,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":f(d)))return d.v}}}),u},getPath:function(e,t,n,r){var o=this;r||(r={});var u=[l.utils.isUndefined(r.basePath)?l.utils.isUndefined(t.basePath)?o.basePath:t.basePath:r.basePath,o.getEndpoint(t,l.utils.isString(n)||l.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(n),i.apply(l.utils,u)},getParams:function(e){return e||(e={}),l.utils.isUndefined(e.params)?{}:l.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),l.utils.isUndefined(t.suffix)?l.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),l.utils.reject(t))}var r=this,o=new Date;t||(t={});var i=e.data,u=e.cache,a=e.timeout;e=l.utils.copy(e,null,null,null,["data","cache","timeout"]),e=l.utils.deepMixIn(e,r.httpConfig),e.data=i,e.cache=u,e.timeout=a,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return l.utils.resolve(r.beforeHTTP(e,t)).then(function(o){return e=o||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return l.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",i=r.op="beforePOST",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="POST",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPOST",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},PUT:function(e,t,n,r){var o=this,i=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",i=r.op="beforePUT",l.utils.resolve(o[i](e,t,n,r)).then(function(u){return n=l.utils.isUndefined(u)?n:u,i=r.op="PUT",o.dbg(i,e,t,n,r),o.HTTP(n,r)}).then(function(u){return i=r.op="afterPUT",l.utils.resolve(o[i](e,t,n,r,u)).then(function(e){return l.utils.isUndefined(e)?u:e})})},queryTransform:function(e,t,n){return n||(n={}),l.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):l.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return l.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),l.utils.isFunction(n.serialize)?n.serialize(e,t,n):l.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var o=this;if(n||(n={}),r||(r={}),!l.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=o.getParams(r),r.params.sum=t,r.suffix=o.getSuffix(e,r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),h.sum.call(o,e,t,n,r)},update:function(e,t,n,r){var o=this;return r||(r={}),r.params=o.getParams(r),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.update.call(o,e,t,n,r)},updateAll:function(e,t,n,r){var o=this;return n||(n={}),r||(r={}),r.params=o.getParams(r),l.utils.deepMixIn(r.params,n),r.params=o.queryTransform(e,r.params,r),r.suffix=o.getSuffix(e,r),h.updateAll.call(o,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!l.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":f(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return l.utils.reject(e)},n[e]=function(n,r){var o=this;l.utils.isObject(n)&&(r=n),r=r||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),a={};if(l.utils.fillIn(a,t),!r.hasOwnProperty("endpoint")&&a.endpoint&&(r.endpoint=a.endpoint),"function"==typeof r.getEndpoint)a.url=r.getEndpoint(o,r);else{var s=[r.basePath||o.basePath||u.basePath,u.getEndpoint(o,l.utils.isSorN(n)?n:null,r)];l.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),a.url=i.apply(null,s)}return a.method=a.method||"GET",a.mapper=o.name,l.utils.deepMixIn(a,r),l.utils.resolve(a).then(r.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(n){return l.utils.forOwn(e,function(e,r){t.addAction(r,e)(n)}),n}},t.version={beta:5,full:"3.0.0-beta.5",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,f),t.utils.fillIn(n,e)}function r(e,n,r){var o=this;n||(n={}),o.data=e,t.utils.fillIn(o,n),o.op=r}var o={};o.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},o.slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var i=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-1];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},u=function(){for(var e=this,n=arguments.length,r=Array(n),o=0;n>o;o++)r[o]=arguments[o];var i=r[r.length-2];return e.dbg.apply(e,[i.op].concat(r)),t.utils.resolve()},a=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},f={debug:!1,raw:!1},l=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:u,afterCreate:u,afterCreateMany:u,afterDestroy:u,afterDestroyAll:u,afterFind:u,afterFindAll:u,afterSum:u,afterUpdate:u,afterUpdateAll:u,afterUpdateMany:u,beforeCount:i,beforeCreate:i,beforeCreateMany:i,beforeDestroy:i,beforeDestroyAll:i,beforeFind:i,beforeFindAll:i,beforeSum:i,beforeUpdate:i,beforeUpdateAll:i,beforeUpdateMany:i,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="count",u.dbg(a,e,n,i),t.utils.resolve(u._count(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,a);return d=u.respond(d,i),a=i.op="afterCount",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),a=i.op="create",u.dbg(a,e,n,i),t.utils.resolve(u._create(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"create");return d.created=l?1:0,d=u.respond(d,i),a=i.op="afterCreate",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="createMany",u.dbg(a,e,n,i),t.utils.resolve(u._createMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"createMany");return d.created=l.length,d=u.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var u=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroy",u.dbg(a,e,n,i),t.utils.resolve(u._destroy(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroy");return d=u.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var u=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(u[a](e,n,i)).then(function(){return a=i.op="destroyAll",u.dbg(a,e,n,i),t.utils.resolve(u._destroyAll(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new r(l,c,"destroyAll");return d=u.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var u=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return u.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return u.findAll(a,{where:o.defineProperty({},a.idAttribute,{in:s})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var f=function(){var t=r;return{v:u.find(a,u.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof f?"undefined":o.typeof(f))?f.v:void 0},find:function(e,n,i){var u=this,a=void 0,s=void 0;return i||(i={}),i.with||(i.with=[]),s=i.op="beforeFind",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="find",u.dbg(s,e,n,i),t.utils.resolve(u._find(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];if(s){a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?u.loadHasOne(e,t,a,n):u.loadHasMany(e,t,a,n),r&&f.push(r)}),Promise.all(f)}}).then(function(){var o=new r(a,{},"find");return o.found=a?1:0,o=u.respond(o,i),s=i.op="afterFind",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},findAll:function(e,n,i){var u=this;i||(i={}),i.with||(i.with=[]);var a=[],s=void 0,f=i._activeWith;if(t.utils.isObject(f)){var l=f.query||{};f.replace?n=l:t.utils.deepFillIn(n,l)}return s=i.op="beforeFindAll",t.utils.resolve(u[s](e,n,i)).then(function(){return s=i.op="findAll",u.dbg(s,e,n,i),t.utils.resolve(u._findAll(e,n,i))}).then(function(n){var r=o.slicedToArray(n,1),s=r[0];s||(s=[]),a=s;var f=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=u.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=u.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=u.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?u.loadHasMany(e,t,a,n):u.loadHasOne(e,t,a,n),r&&f.push(r)}),Promise.all(f)}).then(function(){var o=new r(a,{},"findAll");return o.found=a.length,o=u.respond(o,i),s=i.op="afterFindAll",t.utils.resolve(u[s](e,n,i,o)).then(function(e){return t.utils.isUndefined(e)?o:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,o){var i=this,u=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(u=!0,r=[r]);var a=r.map(function(t){return i.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return u?f["=="]=a[0]:f.in=a.filter(function(e){return e}),i.findAll(n.getRelation(),s,o).then(function(o){r.forEach(function(r){var i=[];u?i=o:o.forEach(function(o){t.utils.get(o,n.foreignKey)===r[e.idAttribute]&&i.push(o)}),n.setLocalField(r,i)})})},loadHasManyLocalKeys:function(e,n,r,i){var u=this,s=void 0,f=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:u.makeHasManyLocalKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)});var l=function(){var s=[];return r.forEach(function(t){s=s.concat(u.self.makeHasManyLocalKeys(e,n,t))}),{v:u.findAll(f,{where:o.defineProperty({},f.idAttribute,{in:a(s).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var o=[],i=t.utils.get(r,n.localKeys)||[];i=t.utils.isArray(i)?i:Object.keys(i),e.forEach(function(e){i&&-1!==i.indexOf(e[f.idAttribute])&&o.push(e)}),n.setLocalField(r,o)}),e})}}();return"object"===("undefined"==typeof l?"undefined":o.typeof(l))?l.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var u=this,a=n.getRelation(),s=e.idAttribute,f=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(f=r),f?u.findAll(n.getRelation(),{where:o.defineProperty({},n.foreignKeys,{contains:u.makeHasManyForeignKeys(e,n,f)})},i).then(function(e){n.setLocalField(f,e)}):u.findAll(a,{where:o.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return u.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var o=n.foreignKeys;r.forEach(function(r){var i=[],u=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,o)||[];-1!==r.indexOf(u)&&i.push(n)}),n.setLocalField(r,i)})})},loadHasOne:function(e,n,r,o){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,o).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (Adapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(n))}else{var u;(u=console).log.apply(u,[o].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var o=[],i=t.utils.get(r,n.localKeys)||[];return i=t.utils.isArray(i)?i:Object.keys(i),o=o.concat(i),a(o).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,u){var a=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),u||(u={}),s=u.op="beforeSum",t.utils.resolve(a[s](e,n,i,u)).then(function(){return s=u.op="sum",a.dbg(s,e,n,i,u),t.utils.resolve(a._sum(e,n,i,u))}).then(function(f){var l=o.slicedToArray(f,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,s);return p=a.respond(p,u),s=u.op="afterSum",t.utils.resolve(a[s](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,u){var a=this;i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdate",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=s(e,i),f=u.op="update",a.dbg(f,e,n,i,u),t.utils.resolve(a._update(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];d||(d={});var p=new r(c,d,"update");return p.updated=c?1:0,p=a.respond(p,u),f=u.op="afterUpdate",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,u){var a=this;n||(n={}),i||(i={}),u||(u={});var f=void 0;return f=u.op="beforeUpdateAll",t.utils.resolve(a[f](e,n,i,u)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),f=u.op="updateAll",a.dbg(f,e,n,i,u),t.utils.resolve(a._updateAll(e,n,i,u))}).then(function(s){var l=o.slicedToArray(s,2),c=l[0],d=l[1];c||(c=[]),d||(d={});var p=new r(c,d,"updateAll");return p.updated=c.length,p=a.respond(p,u),f=u.op="afterUpdateAll",t.utils.resolve(a[f](e,n,i,u,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var u=this;n||(n=[]),i||(i={});var a=void 0,f=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,f)}),a=i.op="beforeUpdateMany",t.utils.resolve(u[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),a=i.op="updateMany",u.dbg(a,e,n,i),t.utils.resolve(u._updateMany(e,n,i))}).then(function(s){var f=o.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new r(l,c,"updateMany");return d.updated=l.length,d=u.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(u[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}}),e.noop=i,e.noop2=u,e.unique=a,e.withoutRelations=s,e.Adapter=n,e.reserved=l,e.Response=r})},function(e,t,n){e.exports=n(4)},function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new a,response:new a}}var o=n(5),i=n(6),u=n(7),a=n(17),s=n(18),f=n(19),l=n(20),c=n(12);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(o),p=e.exports=l(r.prototype.request,d);p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(21),i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){"use strict";var r=n(6),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){"use strict";function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function o(e){return"[object FormData]"===b.call(e)}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,o=e.length;o>r;r++)t.call(null,e[r],r,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:o,isArrayBufferView:i,isString:u,isNumber:a,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){(function(t){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(9):"undefined"!=typeof t&&(i=n(9)),"function"==typeof i&&i(r,o,e)}catch(e){o(e)}})}}).call(t,n(8))},function(e,t){function n(){f=!1,u.length?s=u.concat(s):l=-1,s.length&&r()}function r(){if(!f){var e=setTimeout(n);f=!0;for(var t=s.length;t;){for(u=s,s=[];++l1)for(var n=1;n>8-a%1*8)){if(r=i.charCodeAt(a+=.75),r>255)throw new n;t=t<<8|r}return u}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){"use strict";e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){"use strict";var r=n(6);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,u){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),u===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(6);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;rn;n++)t[n]=arguments[n];var r=a(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function s(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function f(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(s(n)+"="+s(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var n=this;e||(e={}),t.utils.fillIn(e,E),r.call(n,e)}function c(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":h.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var a=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var f=[i.basePath||o.basePath||a.basePath,a.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&f.push(r),f.push(n.pathname||e),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){c(t,e)(n)}),n}}var p="undefined"!=typeof window?window:"undefined"!=typeof global?global:this,h={};h.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},h.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},h.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var y=n(function(e,t,n){!function(n,r){"object"==typeof t&&"object"==typeof e?e.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof t?t.axios=r():n.axios=r()}(p,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){function r(e){this.defaults=o.merge({},e),this.interceptors={request:new u,response:new u}}var i=n(2),o=n(3),a=n(4),u=n(13),s=n(14),f=n(15),l=n(16),c=n(8);r.prototype.request=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge(i,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(i),p=e.exports=l(r.prototype.request,d);e.exports.Axios=r,p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(17),o.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){var r=n(3),i=/^\)\]\}',?\n/,o={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(i,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(o),post:r.merge(o),put:r.merge(o)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function o(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function a(e){return"string"==typeof e}function u(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,i=e.length;i>r;r++)t.call(null,e[r],r,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(null,e[o],o,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:i,isArrayBufferView:o,isString:a,isNumber:u,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){e.exports=function(e){return new Promise(function(t,r){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(5):"undefined"!=typeof process&&(i=n(5)),"function"==typeof i&&i(t,r,e)}catch(e){r(e)}})}},function(e,t,n){var r=n(3),i=n(6),o=n(7),a=n(8),u=n(9),s="undefined"!=typeof window&&window.btoa||n(10),f=n(11);e.exports=function(e,t,l){var c=l.data,d=l.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(l.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),l.auth){var v=l.auth.username||"",m=l.auth.password||"";d.Authorization="Basic "+s(v+":"+m)}if(p.open(l.method.toUpperCase(),i(l.url,l.params,l.paramsSerializer),!0),p.timeout=l.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?o(p.getAllResponseHeaders()):null,r=l.responseType&&"text"!==l.responseType?p.response:p.responseText,i={data:a(r,n,l.transformResponse),status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:l,request:p};f(e,t,i),p=null}},p.onerror=function(){t(new Error("Network Error")),p=null},p.ontimeout=function(){var e=new Error("timeout of "+l.timeout+"ms exceeded");e.timeout=l.timeout,e.code="ECONNABORTED",t(e),p=null},r.isStandardBrowserEnv()){var g=n(12),b=l.withCredentials||u(l.url)?g.read(l.xsrfCookieName):void 0;b&&(d[l.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(e,t){"undefined"==typeof c&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),l.withCredentials&&(p.withCredentials=!0),l.responseType)try{p.responseType=l.responseType}catch(e){if("json"!==p.responseType)throw e}l.progress&&("post"===l.method||"put"===l.method?p.upload.addEventListener("progress",l.progress):"get"===l.method&&p.addEventListener("progress",l.progress)),void 0===c&&(c=null),p.send(c)}},function(e,t,n){function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(3);e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else{var a=[];i.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(i.isArray(e)&&(t+="[]"),i.isArray(e)||(e=[e]),i.forEach(e,function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))}))}),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){var r=n(3);e.exports=function(e){var t,n,i,o={};return e?(r.forEach(e.split("\n"),function(e){i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t&&(o[t]=o[t]?o[t]+", "+n:n)}),o):o}},function(e,t,n){var r=n(3);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(i.setAttribute("href",t),t=i.href),i.setAttribute("href",t),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return t=e(window.location.href),function(n){var i=r.isString(n)?e(n):n;return i.protocol===t.protocol&&i.host===t.host}}():function(){return function(){return!0}}()},function(e,t){function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,o=String(e),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&t>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,i,o,a){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;ri;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},g=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},b=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},w=function(e,n){return t.utils.omit(n,e.relationFields||[])},A={debug:!1,raw:!1};r.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(r.prototype,{afterCount:g,afterCreate:g,afterCreateMany:g,afterDestroy:g,afterDestroyAll:g,afterFind:g,afterFindAll:g,afterSum:g,afterUpdate:g,afterUpdateAll:g,afterUpdateMany:g,beforeCount:m,beforeCreate:m,beforeCreateMany:m,beforeDestroy:m,beforeDestroyAll:m,beforeFind:m,beforeFindAll:m,beforeSum:m,beforeUpdate:m,beforeUpdateAll:m,beforeUpdateMany:m,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCount",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="count",o.dbg(a,e,n,r),t.utils.resolve(o._count(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,a);return c=o.respond(c,r),a=r.op="afterCount",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreate",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n),a=r.op="create",o.dbg(a,e,n,r),t.utils.resolve(o._create(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"create");return c.created=f?1:0,c=o.respond(c,r),a=r.op="afterCreate",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t)}),a=r.op="createMany",o.dbg(a,e,n,r),t.utils.resolve(o._createMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"createMany");return c.created=f.length,c=o.respond(c,r),a=r.op="afterCreateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,r){var o=this,a=void 0;return r||(r={}),a=r.op="beforeDestroy",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroy",o.dbg(a,e,n,r),t.utils.resolve(o._destroy(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroy");return c=o.respond(c,r),a=r.op="afterDestroy",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroyAll",o.dbg(a,e,n,r),t.utils.resolve(o._destroyAll(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroyAll");return c=o.respond(c,r),a=r.op="afterDestroyAll",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:h.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},find:function(e,n,r){var o=this,a=void 0,u=void 0;return r||(r={}),r.with||(r.with=[]),u=r.op="beforeFind",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="find",o.dbg(u,e,n,r),t.utils.resolve(o._find(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new i(a,{},"find");return s.found=a?1:0,s=o.respond(s,r),u=r.op="afterFind",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,r){var o=this;r||(r={}),r.with||(r.with=[]);var a=[],u=void 0,s=r._activeWith;if(t.utils.isObject(s)){var f=s.query||{};s.replace?n=f:t.utils.deepFillIn(n,f)}return u=r.op="beforeFindAll",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="findAll",o.dbg(u,e,n,r),t.utils.resolve(o._findAll(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new i(a,{},"findAll");return s.found=a.length,s=o.respond(s,r),u=r.op="afterFindAll",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return a?f["=="]=u[0]:f.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:b(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:h.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:h.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),b(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,r,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return r||(r={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,r,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,r,o),t.utils.resolve(a._sum(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,u);return d=a.respond(d,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,r,o){var a=this;r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return r=t.utils.isUndefined(i)?r:i,r=w(e,r),u=o.op="update",a.dbg(u,e,n,r,o),t.utils.resolve(a._update(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,"update");return d.updated=l?1:0,d=a.respond(d,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateAll:function(e,n,r,o){var a=this;n||(n={}),r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n),u=o.op="updateAll",a.dbg(u,e,n,r,o),t.utils.resolve(a._updateAll(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new i(l,c,"updateAll");return d.updated=l.length,d=a.respond(d,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateMany:function(e,n,r){var o=this;n||(n=[]),r||(r={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=r.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t)}),a=r.op="updateMany",o.dbg(a,e,n,r),t.utils.resolve(o._updateMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"updateMany");return c.updated=f.length,c=o.respond(c,r),a=r.op="afterUpdateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}});var T=!1;try{T=window&&window.fetch}catch(e){}var x=r.prototype,E={basePath:"",forceTrailingSlash:!1,http:v,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(r.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:r}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:g,afterGET:g,afterHTTP:g,afterPOST:g,afterPUT:g,beforeDEL:m,beforeGET:m,beforeHTTP:m,beforePOST:m,beforePUT:m,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(f(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],a=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,f=e.getRelation(),l=r.params[s];if(l===!1||!s||!f)return l===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(l=l||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),f.idAttribute):null)),l){var c=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,f),a=u(i.getEndpoint(f,l,e),l,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":h.typeof(c)))return c.v}}}),a},getPath:function(e,n,r,i){var o=this;i||(i={});var a=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(r),u.apply(t.utils,a)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var f=e.suffix||n.suffix||i.suffix;if(f&&e.url.substr(e.url.length-f.length)!==f&&(e.url+=f),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,T&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u, +a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),x.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),x.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.updateMany.call(r,e,t,n)}});var P={beta:6,full:"3.0.0-beta.6",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=c,e.addActions=d,e.version=P}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index b553c53..8e90b07 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","default","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","baseURL","withCredentials","transformRequest","common","chain","promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","promises","spread","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isArrayBufferView","buffer","isFile","isBlob","toLowerCase","JSON","stringify","transformResponse","parse","Accept","post","put","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","ArrayBuffer","isView","isDate","pipe","trim","isStandardBrowserEnv","document","createElement","fn","l","assignValue","process","XMLHttpRequest","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","setTimeout","len","run","clearTimeout","Item","fun","nextTick","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","NODE_ENV","XDomainRequest","auth","username","password","Authorization","open","paramsSerializer","onprogress","ontimeout","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","chars","charCodeAt","write","expires","path","domain","secure","cookie","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","__commonjs","fn","__commonjs_global","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isArrayBufferView","buffer","isFile","isBlob","isUndefined","toLowerCase","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","trim","str","isStandardBrowserEnv","document","createElement","l","assignValue","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","axios$1","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","omit","relationFields","debug","raw","extend","addHiddenPropsToTarget","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","_props","_create","_results2","created","createMany","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","with","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","hasFetch","fetch","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","logResponse","start","toUTCString","getTime","payload","cache","catch","version","beta","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index da746a5..abfa923 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,3024 +1,2927 @@ /*! * js-data-fetch -* @version 3.0.0-beta.5 - Homepage +* @version 3.0.0-beta.6 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("js-data"), require("undefined")); - else if(typeof define === 'function' && define.amd) - define(["js-data", "undefined"], factory); - else if(typeof exports === 'object') - exports["JSDataHttp"] = factory(require("js-data"), require("undefined")); - else - root["JSDataHttp"] = factory(root["JSData"], root["undefined"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - var _jsData = __webpack_require__(1); - - var _jsDataAdapter = __webpack_require__(2); - - /* global fetch:true Headers:true Request:true */ - - var axios = __webpack_require__(3); - - - var hasFetch = false; - - try { - hasFetch = window && window.fetch; - } catch (e) {} - - function isValidString(value) { - return value != null && value !== ''; - } - function join(items, separator) { - separator || (separator = ''); - return items.filter(isValidString).join(separator); - } - function makePath() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - function encode(val) { - return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); - } - - function buildUrl(url, params) { - if (!params) { - return url; - } - - var parts = []; - - _jsData.utils.forOwn(params, function (val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - if (!_jsData.utils.isArray(val)) { - val = [val]; - } - - val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { - v = v.toISOString(); - } else if (_jsData.utils.isObject(v)) { - v = _jsData.utils.toJson(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - if (parts.length > 0) { - url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); - } - - return url; - } - - var __super__ = _jsDataAdapter.Adapter.prototype; - - var DEFAULTS = { - // Default and user-defined settings - /** - * @name HttpAdapter#basePath - * @type {string} - */ - basePath: '', - - /** - * @name HttpAdapter#forceTrailingSlash - * @type {boolean} - * @default false - */ - forceTrailingSlash: false, - - /** - * @name HttpAdapter#http - * @type {Function} - */ - http: axios, - - /** - * @name HttpAdapter#httpConfig - * @type {Object} - */ - httpConfig: {}, - - /** - * @name HttpAdapter#suffix - * @type {string} - */ - suffix: '', - - /** - * @name HttpAdapter#useFetch - * @type {boolean} - * @default false - */ - useFetch: false - }; - - /** - * HttpAdapter class. - * - * @class HttpAdapter - * @extends Adapter - * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO - */ - function HttpAdapter(opts) { - var self = this; - opts || (opts = {}); - _jsData.utils.fillIn(opts, DEFAULTS); - _jsDataAdapter.Adapter.call(self, opts); - } - - /** - * @name module:js-data-http.HttpAdapter - * @see HttpAdapter - */ - exports.HttpAdapter = HttpAdapter; - - // Setup prototype inheritance from Adapter - HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } - }); - - Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: _jsDataAdapter.Adapter - }); - - /** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() - * - * @name HttpAdapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. - */ - HttpAdapter.extend = _jsData.utils.extend; - - _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { - /** - * @name HttpAdapter#afterDEL - * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterDEL: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterGET - * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterGET: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterHTTP - * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterHTTP: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterPOST - * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterPOST: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterPUT - * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterPUT: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#beforeDEL - * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts - */ - beforeDEL: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforeGET - * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts - */ - beforeGET: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforeHTTP - * @method - * @param {Object} config - * @param {Object} opts - */ - beforeHTTP: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforePOST - * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - */ - beforePOST: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforePUT - * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - */ - beforePUT: _jsDataAdapter.noop, - - _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _end: function _end(mapper, opts, response) { - return [this.deserialize(mapper, response, opts), response]; - }, - _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - - - /** - * Retrieve the number of records that match the selection `query`. - * - * @name HttpAdapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); - }, - - - /** - * Create a new the record from the provided `props`. - * - * @name HttpAdapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); - }, - - - /** - * Create multiple new records in batch. - * - * @name HttpAdapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); - }, - - - /** - * Make an Http request to `url` according to the configuration in `config`. - * - * @name HttpAdapter#DEL - * @method - * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to - * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - DEL: function DEL(url, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'delete'; - - // beforeDEL lifecycle hook - op = opts.op = 'beforeDEL'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterDEL lifecycle hook - op = opts.op = 'afterDEL'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Transform the server response object into the payload that will be returned - * to JSData. - * - * @name HttpAdapter#deserialize - * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. - */ - deserialize: function deserialize(mapper, response, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.deserialize)) { - return opts.deserialize(mapper, response, opts); - } - if (_jsData.utils.isFunction(mapper.deserialize)) { - return mapper.deserialize(mapper, response, opts); - } - if (response && response.hasOwnProperty('data')) { - return response.data; - } - return response; - }, - - - /** - * Destroy the record with the given primary key. - * - * @name HttpAdapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); - }, - - - /** - * Destroy the records that match the selection `query`. - * - * @name HttpAdapter#destroyAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); - }, - - - /** - * Log an error. - * - * @name HttpAdapter#error - * @method - * @param {...*} [args] Arguments to log. - */ - error: function error() { - if (console) { - var _console; - - (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); - } - }, - - - /** - * Make an Http request using `window.fetch`. - * - * @name HttpAdapter#fetch - * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. - * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. - * @param {string} config.url Url for the request. - * @param {Object} [opts] Configuration options. - */ - fetch: function (_fetch) { - function fetch(_x, _x2) { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function (config, opts) { - var requestConfig = { - method: config.method, - // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) - }; - - if (config.data) { - requestConfig.body = _jsData.utils.toJson(config.data); - } - - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { - response.config = { - method: config.method, - url: config.url - }; - return response.json().then(function (data) { - response.data = data; - return response; - }); - }); - }), - - - /** - * Retrieve the record with the given primary key. - * - * @name HttpAdapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); - }, - - - /** - * Retrieve the records that match the selection `query`. - * - * @name HttpAdapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#GET - * @method - * @param {string} url The url for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - GET: function GET(url, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'get'; - - // beforeGET lifecycle hook - op = opts.op = 'beforeGET'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterGET lifecycle hook - op = opts.op = 'afterGET'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * @name HttpAdapter#getEndpoint - * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO - * @return {string} Full path. - */ - getEndpoint: function getEndpoint(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; - var relationList = mapper.relationList || []; - var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; - - relationList.forEach(function (def) { - if (def.type !== 'belongsTo' || !def.parent) { - return; - } - var item = void 0; - var parentKey = def.foreignKey; - var parentDef = def.getRelation(); - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete opts.params[parentKey]; - } - return false; - } else { - delete opts.params[parentKey]; - - if (_jsData.utils.isObject(id)) { - item = id; - } - - if (item) { - parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); - } - - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - _jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - _jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - } - }); - - return endpoint; - }, - - - /** - * @name HttpAdapter#getPath - * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO - * @param {Object} opts Configuration options. - */ - getPath: function getPath(method, mapper, id, opts) { - var self = this; - opts || (opts = {}); - var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(_jsData.utils, args); - }, - getParams: function getParams(opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.params)) { - return {}; - } - return _jsData.utils.copy(opts.params); - }, - getSuffix: function getSuffix(mapper, opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.suffix)) { - if (_jsData.utils.isUndefined(mapper.suffix)) { - return this.suffix; - } - return mapper.suffix; - } - return opts.suffix; - }, - - - /** - * Make an Http request. - * - * @name HttpAdapter#HTTP - * @method - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - HTTP: function HTTP(config, opts) { - var self = this; - var start = new Date(); - opts || (opts = {}); - var payload = config.data; - var cache = config.cache; - var timeout = config.timeout; - config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = _jsData.utils.deepMixIn(config, self.httpConfig); - config.data = payload; - config.cache = cache; - config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - - function logResponse(data) { - var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); - } - return data; - } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); - } - return _jsData.utils.reject(data); - } - } - - if (!self.http) { - throw new Error('You have not configured this adapter with an http library!'); - } - - return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { - config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); - } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); - }); - }).then(function (response) { - return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#POST - * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - POST: function POST(url, data, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'post'; - - // beforePOST lifecycle hook - op = opts.op = 'beforePOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPOST lifecycle hook - op = opts.op = 'afterPOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#PUT - * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - PUT: function PUT(url, data, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'put'; - - // beforePUT lifecycle hook - op = opts.op = 'beforePUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPUT lifecycle hook - op = opts.op = 'afterPUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#queryTransform - * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO - * @return {*} Transformed params. - */ - queryTransform: function queryTransform(mapper, params, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.queryTransform)) { - return opts.queryTransform(mapper, params, opts); - } - if (_jsData.utils.isFunction(mapper.queryTransform)) { - return mapper.queryTransform(mapper, params, opts); - } - return params; - }, - - - /** - * Error handler invoked when the promise returned by {@link HttpAdapter#http} - * is rejected. Default implementation is to just return the error wrapped in - * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is - * called by {@link HttpAdapter#HTTP}. - * - * @name HttpAdapter#responseError - * @method - * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. - * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. - * @return {Promise} - */ - responseError: function responseError(err, config, opts) { - return _jsData.utils.reject(err); - }, - - - /** - * TODO - * - * @name HttpAdapter#serialize - * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO - * @return {*} Serialized data. - */ - serialize: function serialize(mapper, data, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.serialize)) { - return opts.serialize(mapper, data, opts); - } - if (_jsData.utils.isFunction(mapper.serialize)) { - return mapper.serialize(mapper, data, opts); - } - return data; - }, - - - /** - * Retrieve the sum of the field of the records that match the selection query. - * - * @name HttpAdapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field The field to sum. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - if (!_jsData.utils.utils.isString(field)) { - throw new Error('field must be a string!'); - } - opts.params = self.getParams(opts); - opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#update - * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#updateAll - * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); - }, - - - /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. - * - * @name HttpAdapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Array} records Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); - } - }); - - /** - * Add an Http actions to a mapper. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * // GET /reports/schools/:school_id/teachers - * addAction('getTeacherReports', { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) - * - * @name module:js-data-http.addAction - * @method - * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - exports.addAction = function addAction(name, opts) { - if (!name || !_jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); - } - return function (mapper) { - if (mapper[name]) { - throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); - } - opts.request = opts.request || function (config) { - return config; - }; - opts.response = opts.response || function (response) { - return response; - }; - opts.responseError = opts.responseError || function (err) { - return _jsData.utils.reject(err); - }; - mapper[name] = function (id, _opts) { - var self = this; - if (_jsData.utils.isObject(id)) { - _opts = id; - } - _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); - var config = {}; - _jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } - if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); - } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; - if (_jsData.utils.isSorN(id)) { - args.push(id); - } - args.push(opts.pathname || name); - config.url = makePath.apply(null, args); - } - config.method = config.method || 'GET'; - config.mapper = self.name; - _jsData.utils.deepMixIn(config, _opts); - return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.mapper = self.name; - } - return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); - }; - return mapper; - }; - }; - - /** - * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for - * action configuration options. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * addActions({ - * // GET /reports/schools/:school_id/teachers - * getTeacherReports: { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * } - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) - * - * @name module:js-data-http.addActions - * @method - * @param {Object.} opts Object where the key is an action name - * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - exports.addActions = function addActions(opts) { - opts || (opts = {}); - return function (mapper) { - _jsData.utils.forOwn(opts, function (value, key) { - exports.addAction(key, value)(mapper); - }); - return mapper; - }; - }; - - /** - * Details of the current version of the `js-data-http` module. - * - * @name module:js-data-http.version - * @type {Object} - * @property {string} version.full The full semver value. - * @property {number} version.major The major version number. - * @property {number} version.minor The minor version number. - * @property {number} version.patch The patch version number. - * @property {(string|boolean)} version.alpha The alpha version value, - * otherwise `false` if the current version is not alpha. - * @property {(string|boolean)} version.beta The beta version value, - * otherwise `false` if the current version is not beta. - */ - exports.version = { - beta: 5, - full: '3.0.0-beta.5', +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) : + typeof define === 'function' && define.amd ? define('js-data-fetch', ['exports', 'js-data'], factory) : + (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); +}(this, function (exports,jsData) { 'use strict'; + + var babelHelpers = {}; + babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + babelHelpers.defineProperty = function (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; + }; + + babelHelpers.slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + + babelHelpers; + + var noop = function noop() { + var self = this; + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = args[args.length - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + var noop2 = function noop2() { + var self = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var opts = args[args.length - 2]; + self.dbg.apply(self, [opts.op].concat(args)); + return jsData.utils.resolve(); + }; + + var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; + }; + + var withoutRelations = function withoutRelations(mapper, props) { + return jsData.utils.omit(props, mapper.relationFields || []); + }; + + var DEFAULTS$1 = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, + + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false + }; + + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ + function Adapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS$1); + jsData.utils.fillIn(self, opts); + } + + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + var self = this; + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + self.data = data; + + jsData.utils.fillIn(self, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + self.op = op; + } + + /** + * Alternative to ES6 class syntax for extending `Adapter`. + * + * @name Adapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `Adapter`. + */ + Adapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. + * + * @name Adapter#dbg + * @method + */ + dbg: function dbg() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this.log.apply(this, ['debug'].concat(args)); + }, + + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._count(mapper, query, opts)); + }).then(function (results) { + var _results = babelHelpers.slicedToArray(results, 2); + + var data = _results[0]; + var result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'create'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = babelHelpers.slicedToArray(results, 2); + + var data = _results2[0]; + var result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = self.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'createMany'; + self.dbg(op, mapper, props, opts); + return jsData.utils.resolve(self._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = babelHelpers.slicedToArray(results, 2); + + var data = _results3[0]; + var result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = self.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = babelHelpers.slicedToArray(results, 2); + + var data = _results4[0]; + var result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = self.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = babelHelpers.slicedToArray(results, 2); + + var data = _results5[0]; + var result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = self.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var self = this; + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var _ret = function () { + var record = records; + return { + v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }) + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } else { + var keys = records.map(function (record) { + return self.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return self.findAll(relationDef, { + where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + var record = void 0, + op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + self.dbg(op, mapper, id, opts); + return jsData.utils.resolve(self._find(mapper, id, opts)); + }).then(function (results) { + var _results6 = babelHelpers.slicedToArray(results, 1); + + var _record = _results6[0]; + + if (!_record) { + return; + } + record = _record; + var tasks = []; + + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = self.loadHasOne(mapper, def, record, __opts); + } else { + task = self.loadHasMany(mapper, def, record, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, record, __opts); + } + if (task) { + tasks.push(task); + } + }); + + return Promise.all(tasks); + }).then(function () { + var response = new Response(record, {}, 'find'); + response.found = record ? 1 : 0; + response = self.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + opts || (opts = {}); + opts.with || (opts.with = []); + + var records = []; + var op = void 0; + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + self.dbg(op, mapper, query, opts); + return jsData.utils.resolve(self._findAll(mapper, query, opts)); + }).then(function (results) { + var _results7 = babelHelpers.slicedToArray(results, 1); + + var _records = _results7[0]; + + _records || (_records = []); + records = _records; + var tasks = []; + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasMany') { + task = self.loadHasMany(mapper, def, records, __opts); + } else { + task = self.loadHasOne(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = self.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + return Promise.all(tasks); + }).then(function () { + var response = new Response(records, {}, 'findAll'); + response.found = records.length; + response = self.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var self = this; + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return self.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var self = this; + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': self.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var _ret2 = function () { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + }); + return { + v: self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }) + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var self = this; + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return self.findAll(def.getRelation(), { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'contains': self.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return self.findAll(relatedMapper, { + where: babelHelpers.defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return self.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); + }, + + + /** + * Logging utility method. Override this method if you want to send log + * messages to something other than the console. + * + * @name Adapter#log + * @method + * @param {string} level Log level. + * @param {...*} values Values to log. + */ + log: function log(level) { + for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + if (level && !args.length) { + args.push(level); + level = 'debug'; + } + if (level === 'debug' && !this.debug) { + return; + } + var prefix = level.toUpperCase() + ': (Adapter)'; + if (console[level]) { + var _console; + + (_console = console)[level].apply(_console, [prefix].concat(args)); + } else { + var _console2; + + (_console2 = console).log.apply(_console2, [prefix].concat(args)); + } + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + self.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results8 = babelHelpers.slicedToArray(results, 2); + + var data = _results8[0]; + var result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = self.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'update'; + self.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(self._update(mapper, id, props, opts)); + }).then(function (results) { + var _results9 = babelHelpers.slicedToArray(results, 2); + + var data = _results9[0]; + var result = _results9[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = self.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = jsData.utils.isUndefined(_props) ? props : _props; + props = withoutRelations(mapper, props); + op = opts.op = 'updateAll'; + self.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results10 = babelHelpers.slicedToArray(results, 2); + + var data = _results10[0]; + var result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = jsData.utils.isUndefined(_records) ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record); + }); + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results11 = babelHelpers.slicedToArray(results, 2); + + var data = _results11[0]; + var result = _results11[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = self.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { + // Allow for re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + } + }); + + var axios = undefined; + var hasFetch = false; + + try { + hasFetch = window && window.fetch; + } catch (e) {} + + function isValidString(value) { + return value != null && value !== ''; + } + function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); + } + function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + } + + function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (jsData.utils.isObject(v)) { + v = jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var __super__ = Adapter.prototype; + + var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false + }; + + /** + * HttpAdapter class. + * + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO + */ + function HttpAdapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS); + Adapter.call(self, opts); + } + + /** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + + // Setup prototype inheritance from Adapter + HttpAdapter.prototype = Object.create(Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } + }); + + Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: Adapter + }); + + /** + * Alternative to ES6 class syntax for extending `HttpAdapter`. + * + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() + * + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} + * + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() + * + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. + */ + HttpAdapter.extend = jsData.utils.extend; + + jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.params)) { + return {}; + } + return jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.suffix)) { + if (jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; + } else { + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return jsData.utils.reject(data); + } + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); + } + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); + }); + }).then(function (response) { + return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return jsData.utils.reject(err); + }, + + + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.sum.call(self, mapper, field, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.update.call(self, mapper, id, props, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateAll.call(self, mapper, props, query, opts); + }, + + + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateMany.call(self, mapper, records, opts); + } + }); + + /** + * Add an Http actions to a mapper. + * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + function addAction(name, opts) { + if (!name || !jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + if (jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + config.method = config.method || 'GET'; + config.mapper = self.name; + jsData.utils.deepMixIn(config, _opts); + return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }; + return mapper; + }; + } + + /** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ + function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + jsData.utils.forOwn(opts, function (value, key) { + addAction(key, value)(mapper); + }); + return mapper; + }; + } + + /** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ + var version = { + beta: 6, + full: '3.0.0-beta.6', major: 3, minor: 0, patch: 0 }; - - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() - * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() - * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * // ... - * }) - * - * @module js-data-http - */ - exports.default = HttpAdapter; - -/***/ }, -/* 1 */ -/***/ function(module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_1__; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - (function (global, factory) { - true ? factory(exports, __webpack_require__(1)) : - typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : - (factory((global.Adapter = global.Adapter || {}),global.JSData)); - }(this, function (exports,jsData) { 'use strict'; - - var babelHelpers = {}; - babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; - - babelHelpers.defineProperty = function (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; - }; - - babelHelpers.slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (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"); - } - }; - }(); - - babelHelpers; - - var noop = function noop() { - var self = this; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var opts = args[args.length - 1]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var noop2 = function noop2() { - var self = this; - - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var opts = args[args.length - 2]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var unique = function unique(array) { - var seen = {}; - var final = []; - array.forEach(function (item) { - if (item in seen) { - return; - } - final.push(item); - seen[item] = 0; - }); - return final; - }; - - var withoutRelations = function withoutRelations(mapper, props) { - return jsData.utils.omit(props, mapper.relationFields || []); - }; - - var DEFAULTS = { - /** - * Whether to log debugging information. - * - * @name Adapter#debug - * @type {boolean} - * @default false - */ - debug: false, - - /** - * Whether to return a more detailed response object. - * - * @name Adapter#raw - * @type {boolean} - * @default false - */ - raw: false - }; - - /** - * Abstract class meant to be extended by adapters. - * - * @class Adapter - * @abstract - * @param {Object} [opts] Configuration opts. - * @param {boolean} [opts.debug=false] Whether to log debugging information. - * @param {boolean} [opts.raw=false] Whether to return a more detailed response - * object. - */ - function Adapter(opts) { - var self = this; - opts || (opts = {}); - jsData.utils.fillIn(opts, DEFAULTS); - jsData.utils.fillIn(self, opts); - } - - var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - var self = this; - meta || (meta = {}); - - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - self.data = data; - - jsData.utils.fillIn(self, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - self.op = op; - } - - /** - * Alternative to ES6 class syntax for extending `Adapter`. - * - * @name Adapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `Adapter`. - */ - Adapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#afterCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} props The `props` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `afterCount` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterCount: noop2, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `afterCreate` - * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreate: noop2, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `afterCreateMany` - * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreateMany: noop2, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#afterDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `afterDestroy` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroy: noop2, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#afterDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `afterDestroyAll` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroyAll: noop2, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#afterFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `afterFind` - * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. - */ - afterFind: noop2, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#afterFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `afterFindAll` - * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. - */ - afterFindAll: noop2, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#afterSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {string} field The `field` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `afterSum` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterSum: noop2, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#afterUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `afterUpdate` - * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdate: noop2, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#afterUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `afterUpdateAll` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateAll: noop2, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#afterUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} records The `records` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `afterUpdateMany` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateMany: noop2, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#beforeCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} query The `query` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `beforeCount` - */ - beforeCount: noop, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#beforeCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `beforeCreate` - */ - beforeCreate: noop, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#beforeCreateMany - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `beforeCreateMany` - */ - beforeCreateMany: noop, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#beforeDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `beforeDestroy` - */ - beforeDestroy: noop, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#beforeDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `beforeDestroyAll` - */ - beforeDestroyAll: noop, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#beforeFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `beforeFind` - */ - beforeFind: noop, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#beforeFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `beforeFindAll` - */ - beforeFindAll: noop, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#beforeSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `beforeSum` - */ - beforeSum: noop, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#beforeUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `beforeUpdate` - */ - beforeUpdate: noop, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#beforeUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `beforeUpdateAll` - */ - beforeUpdateAll: noop, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#beforeUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} props The `props` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `beforeUpdateMany` - */ - beforeUpdateMany: noop, - - /** - * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. - * - * @name Adapter#dbg - * @method - */ - dbg: function dbg() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['debug'].concat(args)); - }, - - - /** - * Retrieve the number of records that match the selection query. Called by - * `Mapper#count`. - * - * @name Adapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeCount lifecycle hook - op = opts.op = 'beforeCount'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'count'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._count(mapper, query, opts)); - }).then(function (results) { - var _results = babelHelpers.slicedToArray(results, 2); - - var data = _results[0]; - var result = _results[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterCount lifecycle hook - op = opts.op = 'afterCount'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create a new record. Called by `Mapper#create`. - * - * @name Adapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The record to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreate lifecycle hook - op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'create'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._create(mapper, props, opts)); - }).then(function (results) { - var _results2 = babelHelpers.slicedToArray(results, 2); - - var data = _results2[0]; - var result = _results2[1]; - - result || (result = {}); - var response = new Response(data, result, 'create'); - response.created = data ? 1 : 0; - response = self.respond(response, opts); - - // afterCreate lifecycle hook - op = opts.op = 'afterCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create multiple records in a single batch. Called by `Mapper#createMany`. - * - * @name Adapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The records to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreateMany lifecycle hook - op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = props.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'createMany'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._createMany(mapper, props, opts)); - }).then(function (results) { - var _results3 = babelHelpers.slicedToArray(results, 2); - - var data = _results3[0]; - var result = _results3[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'createMany'); - response.created = data.length; - response = self.respond(response, opts); - - // afterCreateMany lifecycle hook - op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the record with the given primary key. Called by - * `Mapper#destroy`. - * - * @name Adapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var self = this; - var op = void 0; - opts || (opts = {}); - - // beforeDestroy lifecycle hook - op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'destroy'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._destroy(mapper, id, opts)); - }).then(function (results) { - var _results4 = babelHelpers.slicedToArray(results, 2); - - var data = _results4[0]; - var result = _results4[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroy'); - response = self.respond(response, opts); - - // afterDestroy lifecycle hook - op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the records that match the selection query. Called by - * `Mapper#destroyAll`. - * - * @name Adapter#destroyAll - * @method - * @param {Object} mapper the mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeDestroyAll lifecycle hook - op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'destroyAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); - }).then(function (results) { - var _results5 = babelHelpers.slicedToArray(results, 2); - - var data = _results5[0]; - var result = _results5[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroyAll'); - response = self.respond(response, opts); - - // afterDestroyAll lifecycle hook - op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Load a belongsTo relationship. - * - * Override with care. - * - * @name Adapter#loadBelongsTo - * @method - * @return {Promise} - */ - loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var self = this; - var relationDef = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - var _ret = function () { - var record = records; - return { - v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { - def.setLocalField(record, relatedItem); - }) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; - } else { - var keys = records.map(function (record) { - return self.makeBelongsToForeignKey(mapper, def, record); - }).filter(function (key) { - return key; - }); - return self.findAll(relationDef, { - where: babelHelpers.defineProperty({}, relationDef.idAttribute, { - 'in': keys - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (record) { - relatedItems.forEach(function (relatedItem) { - if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { - def.setLocalField(record, relatedItem); - } - }); - }); - }); - } - }, - - - /** - * Retrieve the record with the given primary key. Called by `Mapper#find`. - * - * @name Adapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var self = this; - var record = void 0, - op = void 0; - opts || (opts = {}); - opts.with || (opts.with = []); - - // beforeFind lifecycle hook - op = opts.op = 'beforeFind'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'find'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._find(mapper, id, opts)); - }).then(function (results) { - var _results6 = babelHelpers.slicedToArray(results, 1); - - var _record = _results6[0]; - - if (!_record) { - return; - } - record = _record; - var tasks = []; - - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasOne') { - task = self.loadHasOne(mapper, def, record, __opts); - } else { - task = self.loadHasMany(mapper, def, record, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, record, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, record, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, record, __opts); - } - if (task) { - tasks.push(task); - } - }); - - return Promise.all(tasks); - }).then(function () { - var response = new Response(record, {}, 'find'); - response.found = record ? 1 : 0; - response = self.respond(response, opts); - - // afterFind lifecycle hook - op = opts.op = 'afterFind'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Retrieve the records that match the selection query. - * - * @name Adapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var self = this; - opts || (opts = {}); - opts.with || (opts.with = []); - - var records = []; - var op = void 0; - var activeWith = opts._activeWith; - - if (jsData.utils.isObject(activeWith)) { - var activeQuery = activeWith.query || {}; - if (activeWith.replace) { - query = activeQuery; - } else { - jsData.utils.deepFillIn(query, activeQuery); - } - } - - // beforeFindAll lifecycle hook - op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'findAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._findAll(mapper, query, opts)); - }).then(function (results) { - var _results7 = babelHelpers.slicedToArray(results, 1); - - var _records = _results7[0]; - - _records || (_records = []); - records = _records; - var tasks = []; - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasMany') { - task = self.loadHasMany(mapper, def, records, __opts); - } else { - task = self.loadHasOne(mapper, def, records, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, records, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, records, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, records, __opts); - } - if (task) { - tasks.push(task); - } - }); - return Promise.all(tasks); - }).then(function () { - var response = new Response(records, {}, 'findAll'); - response.found = records.length; - response = self.respond(response, opts); - - // afterFindAll lifecycle hook - op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Resolve the value of the specified option based on the given options and - * this adapter's settings. Override with care. - * - * @name Adapter#getOpt - * @method - * @param {string} opt The name of the option. - * @param {Object} [opts] Configuration options. - * @return {*} The value of the specified option. - */ - getOpt: function getOpt(opt, opts) { - opts || (opts = {}); - return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); - }, - - - /** - * Load a hasMany relationship. - * - * Override with care. - * - * @name Adapter#loadHasMany - * @method - * @return {Promise} - */ - loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var self = this; - var singular = false; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - singular = true; - records = [records]; - } - var IDs = records.map(function (record) { - return self.makeHasManyForeignKey(mapper, def, record); - }); - var query = { - where: {} - }; - var criteria = query.where[def.foreignKey] = {}; - if (singular) { - // more efficient query when we only have one record - criteria['=='] = IDs[0]; - } else { - criteria['in'] = IDs.filter(function (id) { - return id; - }); - } - return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { - records.forEach(function (record) { - var attached = []; - // avoid unneccesary iteration when we only have one record - if (singular) { - attached = relatedItems; - } else { - relatedItems.forEach(function (relatedItem) { - if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { - attached.push(relatedItem); - } - }); - } - def.setLocalField(record, attached); - }); - }); - }, - loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var self = this; - var record = void 0; - var relatedMapper = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - - if (record) { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': self.makeHasManyLocalKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - var _ret2 = function () { - var localKeys = []; - records.forEach(function (record) { - localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); - }); - return { - v: self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': unique(localKeys).filter(function (x) { - return x; - }) - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (item) { - var attached = []; - var itemKeys = jsData.utils.get(item, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - relatedItems.forEach(function (relatedItem) { - if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { - attached.push(relatedItem); - } - }); - def.setLocalField(item, attached); - }); - return relatedItems; - }) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; - } - }, - loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var self = this; - var relatedMapper = def.getRelation(); - var idAttribute = mapper.idAttribute; - var record = void 0; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - - if (record) { - return self.findAll(def.getRelation(), { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'contains': self.makeHasManyForeignKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'isectNotEmpty': records.map(function (record) { - return self.makeHasManyForeignKeys(mapper, def, record); - }) - }) - }, __opts).then(function (relatedItems) { - var foreignKeysField = def.foreignKeys; - records.forEach(function (record) { - var _relatedItems = []; - var id = jsData.utils.get(record, idAttribute); - relatedItems.forEach(function (relatedItem) { - var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; - if (foreignKeys.indexOf(id) !== -1) { - _relatedItems.push(relatedItem); - } - }); - def.setLocalField(record, _relatedItems); - }); - }); - } - }, - - - /** - * Load a hasOne relationship. - * - * Override with care. - * - * @name Adapter#loadHasOne - * @method - * @return {Promise} - */ - loadHasOne: function loadHasOne(mapper, def, records, __opts) { - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - records = [records]; - } - return this.loadHasMany(mapper, def, records, __opts).then(function () { - records.forEach(function (record) { - var relatedData = def.getLocalField(record); - if (jsData.utils.isArray(relatedData) && relatedData.length) { - def.setLocalField(record, relatedData[0]); - } - }); - }); - }, - - - /** - * Logging utility method. Override this method if you want to send log - * messages to something other than the console. - * - * @name Adapter#log - * @method - * @param {string} level Log level. - * @param {...*} values Values to log. - */ - log: function log(level) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - if (level && !args.length) { - args.push(level); - level = 'debug'; - } - if (level === 'debug' && !this.debug) { - return; - } - var prefix = level.toUpperCase() + ': (Adapter)'; - if (console[level]) { - var _console; - - (_console = console)[level].apply(_console, [prefix].concat(args)); - } else { - var _console2; - - (_console2 = console).log.apply(_console2, [prefix].concat(args)); - } - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * There may be reasons why you may want to override this method, like when - * the id of the parent doesn't exactly match up to the key on the child. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKey - * @method - * @return {*} - */ - makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Return the localKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyLocalKeys - * @method - * @return {*} - */ - makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { - var localKeys = []; - var itemKeys = jsData.utils.get(record, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - localKeys = localKeys.concat(itemKeys); - return unique(localKeys).filter(function (x) { - return x; - }); - }, - - - /** - * Return the foreignKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKeys - * @method - * @return {*} - */ - makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { - return jsData.utils.get(record, mapper.idAttribute); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeBelongsToForeignKey - * @method - * @return {*} - */ - makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Retrieve sum of the specified field of the records that match the selection - * query. Called by `Mapper#sum`. - * - * @name Adapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field By to sum. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var self = this; - var op = void 0; - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); - } - query || (query = {}); - opts || (opts = {}); - - // beforeSum lifecycle hook - op = opts.op = 'beforeSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'sum'; - self.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(self._sum(mapper, field, query, opts)); - }).then(function (results) { - var _results8 = babelHelpers.slicedToArray(results, 2); - - var data = _results8[0]; - var result = _results8[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterSum lifecycle hook - op = opts.op = 'afterSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * @name Adapter#respond - * @method - * @param {Object} response Response object. - * @param {Object} opts Configuration options. - * return {Object} If `opts.raw == true` then return `response`, else return - * `response.data`. - */ - respond: function respond(response, opts) { - return this.getOpt('raw', opts) ? response : response.data; - }, - - - /** - * Apply the given update to the record with the specified primary key. Called - * by `Mapper#update`. - * - * @name Adapter#update - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id The primary key of the record to be updated. - * @param {Object} props The update to apply to the record. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var self = this; - props || (props = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdate lifecycle hook - op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'update'; - self.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(self._update(mapper, id, props, opts)); - }).then(function (results) { - var _results9 = babelHelpers.slicedToArray(results, 2); - - var data = _results9[0]; - var result = _results9[1]; - - result || (result = {}); - var response = new Response(data, result, 'update'); - response.updated = data ? 1 : 0; - response = self.respond(response, opts); - - // afterUpdate lifecycle hook - op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Apply the given update to all records that match the selection query. - * Called by `Mapper#updateAll`. - * - * @name Adapter#updateAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The update to apply to the selected records. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var self = this; - props || (props = {}); - query || (query = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdateAll lifecycle hook - op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'updateAll'; - self.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); - }).then(function (results) { - var _results10 = babelHelpers.slicedToArray(results, 2); - - var data = _results10[0]; - var result = _results10[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateAll'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateAll lifecycle hook - op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Update the given records in a single batch. Called by `Mapper#updateMany`. - * - * @name Adapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Object[]} records The records to update. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var self = this; - records || (records = []); - opts || (opts = {}); - var op = void 0; - var idAttribute = mapper.idAttribute; - - records = records.filter(function (record) { - return jsData.utils.get(record, idAttribute); - }); - - // beforeUpdateMany lifecycle hook - op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { - // Allow for re-assignment from lifecycle hook - records = jsData.utils.isUndefined(_records) ? records : _records; - records = records.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'updateMany'; - self.dbg(op, mapper, records, opts); - return jsData.utils.resolve(self._updateMany(mapper, records, opts)); - }).then(function (results) { - var _results11 = babelHelpers.slicedToArray(results, 2); - - var data = _results11[0]; - var result = _results11[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateMany'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateMany lifecycle hook - op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - } - }); - - exports.noop = noop; - exports.noop2 = noop2; - exports.unique = unique; - exports.withoutRelations = withoutRelations; - exports.Adapter = Adapter; - exports.reserved = reserved; - exports.Response = Response; - - })); - //# sourceMappingURL=js-data-adapter.js.map - -/***/ }, -/* 3 */ -/***/ function(module, exports) { - - module.exports = undefined; - -/***/ } -/******/ ]) -}); -; + + /** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() + * + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * // ... + * }) + * + * @module js-data-http + */ + + exports.HttpAdapter = HttpAdapter; + exports.addAction = addAction; + exports.addActions = addActions; + exports.version = version; + +})); //# sourceMappingURL=js-data-fetch.js.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index a1ab4e4..08589fb 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap c15a7e72a42c303f269e","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"undefined\""],"names":[],"mappings":"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;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,4B","file":"./fetch/dist/js-data-fetch.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"undefined\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"undefined\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSDataHttp\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"JSDataHttp\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap c15a7e72a42c303f269e\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js-data-fetch.js","sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props) {\n return utils.omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","DEFAULTS"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index ce0316a..ce12aee 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.5 - Homepage +* @version 3.0.0-beta.6 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("js-data"),require("undefined")):"function"==typeof define&&define.amd?define(["js-data","undefined"],t):"object"==typeof exports?exports.JSDataHttp=t(require("js-data"),require("undefined")):e.JSDataHttp=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return null!=e&&""!==e}function i(e,t){return t||(t=""),e.filter(r).join(t)}function o(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=i(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function u(e,t){if(!t)return e;var n=[];return f.utils.forOwn(t,function(e,t){null!==e&&"undefined"!=typeof e&&(f.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():f.utils.isObject(e)&&(e=f.utils.toJson(e)),n.push(a(t)+"="+a(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}function s(e){var t=this;e||(e={}),f.utils.fillIn(e,y),d.Adapter.call(t,e)}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},f=n(1),d=n(2),c=n(3),p=!1;try{p=window&&window.fetch}catch(e){}var h=d.Adapter.prototype,y={basePath:"",forceTrailingSlash:!1,http:c,httpConfig:{},suffix:"",useFetch:!1};t.HttpAdapter=s,s.prototype=Object.create(d.Adapter.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(s,"__super__",{configurable:!0,value:d.Adapter}),s.extend=f.utils.extend,f.utils.addHiddenPropsToTarget(s.prototype,{afterDEL:d.noop2,afterGET:d.noop2,afterHTTP:d.noop2,afterPOST:d.noop2,afterPUT:d.noop2,beforeDEL:d.noop,beforeGET:d.noop,beforeHTTP:d.noop,beforePOST:d.noop,beforePUT:d.noop,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.params.count=!0,n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.count.call(r,e,t,n)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.createMany.call(r,e,t,n)},DEL:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"delete",i=n.op="beforeDEL",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="DEL",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterDEL",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},deserialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.deserialize)?n.deserialize(e,t,n):f.utils.isFunction(e.deserialize)?e.deserialize(e,t,n):t&&t.hasOwnProperty("data")?t.data:t},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroy.call(r,e,t,n)},destroyAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.destroyAll.call(r,e,t,n)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var n={method:e.method,headers:new Headers(e.headers)};return e.data&&(n.body=f.utils.toJson(e.data)),fetch(new Request(u(e.url,e.params),n)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.find.call(r,e,t,n)},findAll:function(e,t,n){var r=this;return t||(t={}),n||(n={}),n.params=r.getParams(n),n.suffix=r.getSuffix(e,n),f.utils.deepMixIn(n.params,t),n.params=r.queryTransform(e,n.params,n),h.findAll.call(r,e,t,n)},GET:function(e,t,n){var r=this,i=void 0;return t||(t={}),n||(n={}),t.url=e||t.url,t.method=t.method||"get",i=n.op="beforeGET",f.utils.resolve(r[i](e,t,n)).then(function(o){return t=f.utils.isUndefined(o)?t:o,i=n.op="GET",r.dbg(i,e,t,n),r.HTTP(t,n)}).then(function(o){return i=n.op="afterGET",f.utils.resolve(r[i](e,t,n,o)).then(function(e){return f.utils.isUndefined(e)?o:e})})},getEndpoint:function(e,t,n){var r=this;n||(n={}),n.params=f.utils.isUndefined(n.params)?{}:n.params;var i=e.relationList||[],a=f.utils.isUndefined(n.endpoint)?f.utils.isUndefined(e.endpoint)?e.name:e.endpoint:n.endpoint;return i.forEach(function(e){if("belongsTo"===e.type&&e.parent){var i=void 0,u=e.foreignKey,s=e.getRelation(),d=n.params[u];if(d===!1||!u||!s)return d===!1&&delete n.params[u],!1;if(delete n.params[u],f.utils.isObject(t)&&(i=t),i&&(d=d||e.getForeignKey(i)||(e.getLocalField(i)?f.utils.get(e.getLocalField(i),s.idAttribute):null)),d){var c=function(){delete n.endpoint;var e={};return f.utils.forOwn(n,function(t,n){e[n]=t}),f.utils._(e,s),a=o(r.getEndpoint(s,d,e),d,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":l(c)))return c.v}}}),a},getPath:function(e,t,n,r){var i=this;r||(r={});var a=[f.utils.isUndefined(r.basePath)?f.utils.isUndefined(t.basePath)?i.basePath:t.basePath:r.basePath,i.getEndpoint(t,f.utils.isString(n)||f.utils.isNumber(n)||"create"===e?n:null,r)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(n),o.apply(f.utils,a)},getParams:function(e){return e||(e={}),f.utils.isUndefined(e.params)?{}:f.utils.copy(e.params)},getSuffix:function(e,t){return t||(t={}),f.utils.isUndefined(t.suffix)?f.utils.isUndefined(e.suffix)?this.suffix:e.suffix:t.suffix},HTTP:function(e,t){function n(t){var n=i.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-i.getTime())+"ms";return t.status>=200&&t.status<300?(r.log&&r.dbg("debug",n,t),t):(r.error&&r.error("'FAILED: "+n,t),f.utils.reject(t))}var r=this,i=new Date;t||(t={});var o=e.data,a=e.cache,u=e.timeout;e=f.utils.copy(e,null,null,null,["data","cache","timeout"]),e=f.utils.deepMixIn(e,r.httpConfig),e.data=o,e.cache=a,e.timeout=u,r.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var s=e.suffix||t.suffix||r.suffix;if(s&&e.url.substr(e.url.length-s.length)!==s&&(e.url+=s),!r.http)throw new Error("You have not configured this adapter with an http library!");return f.utils.resolve(r.beforeHTTP(e,t)).then(function(i){return e=i||e,p&&(r.useFetch||t.useFetch||!r.http)?r.fetch(e,t).then(n,n):r.http(e).then(n,n).catch(function(n){return r.responseError(n,e,t)})}).then(function(n){return f.utils.resolve(r.afterHTTP(e,t,n)).then(function(e){return e||n})})},POST:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"post",o=r.op="beforePOST",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="POST",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPOST",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},PUT:function(e,t,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.data=t||n.data,n.method=n.method||"put",o=r.op="beforePUT",f.utils.resolve(i[o](e,t,n,r)).then(function(a){return n=f.utils.isUndefined(a)?n:a,o=r.op="PUT",i.dbg(o,e,t,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterPUT",f.utils.resolve(i[o](e,t,n,r,a)).then(function(e){return f.utils.isUndefined(e)?a:e})})},queryTransform:function(e,t,n){return n||(n={}),f.utils.isFunction(n.queryTransform)?n.queryTransform(e,t,n):f.utils.isFunction(e.queryTransform)?e.queryTransform(e,t,n):t},responseError:function(e,t,n){return f.utils.reject(e)},serialize:function(e,t,n){return n||(n={}),f.utils.isFunction(n.serialize)?n.serialize(e,t,n):f.utils.isFunction(e.serialize)?e.serialize(e,t,n):t},sum:function(e,t,n,r){var i=this;if(n||(n={}),r||(r={}),!f.utils.utils.isString(t))throw new Error("field must be a string!");return r.params=i.getParams(r),r.params.sum=t,r.suffix=i.getSuffix(e,r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),h.sum.call(i,e,t,n,r)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.update.call(i,e,t,n,r)},updateAll:function(e,t,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),f.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),h.updateAll.call(i,e,t,n,r)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),h.updateMany.call(r,e,t,n)}}),t.addAction=function(e,t){if(!e||!f.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":l(e)));return function(n){if(n[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return t.request=t.request||function(e){return e},t.response=t.response||function(e){return e},t.responseError=t.responseError||function(e){return f.utils.reject(e)},n[e]=function(n,r){var i=this;f.utils.isObject(n)&&(r=n),r=r||{};var a=i.getAdapter(t.adapter||i.defaultAdapter||"http"),u={};if(f.utils.fillIn(u,t),!r.hasOwnProperty("endpoint")&&u.endpoint&&(r.endpoint=u.endpoint),"function"==typeof r.getEndpoint)u.url=r.getEndpoint(i,r);else{var s=[r.basePath||i.basePath||a.basePath,a.getEndpoint(i,f.utils.isSorN(n)?n:null,r)];f.utils.isSorN(n)&&s.push(n),s.push(t.pathname||e),u.url=o.apply(null,s)}return u.method=u.method||"GET",u.mapper=i.name,f.utils.deepMixIn(u,r),f.utils.resolve(u).then(r.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(r.response||t.response,r.responseError||t.responseError)},n}},t.addActions=function(e){return e||(e={}),function(n){return f.utils.forOwn(e,function(e,r){t.addAction(r,e)(n)}),n}},t.version={beta:5,full:"3.0.0-beta.5",major:3,minor:0,patch:0},t.default=s},function(t,n){t.exports=e},function(e,t,n){!function(e,r){r(t,n(1))}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}var i={};i.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},i.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var o=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},a=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},u=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},s=function(e,n){return t.utils.omit(n,e.relationFields||[])},l={debug:!1,raw:!1},f=["orderBy","sort","limit","offset","skip","where"];n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:a,afterCreate:a,afterCreateMany:a,afterDestroy:a,afterDestroyAll:a,afterFind:a,afterFindAll:a,afterSum:a,afterUpdate:a,afterUpdateAll:a,afterUpdateMany:a,beforeCount:o,beforeCreate:o,beforeCreateMany:o,beforeDestroy:o,beforeDestroyAll:o,beforeFind:o,beforeFindAll:o,beforeSum:o,beforeUpdate:o,beforeUpdateAll:o,beforeUpdateMany:o,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCount",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="count",a.dbg(u,e,n,o),t.utils.resolve(a._count(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,u);return c=a.respond(c,o),u=o.op="afterCount",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreate",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),u=o.op="create",a.dbg(u,e,n,o),t.utils.resolve(a._create(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"create");return c.created=f?1:0,c=a.respond(c,o),u=o.op="afterCreate",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeCreateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="createMany",a.dbg(u,e,n,o),t.utils.resolve(a._createMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"createMany");return c.created=f.length,c=a.respond(c,o),u=o.op="afterCreateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,o){var a=this,u=void 0;return o||(o={}),u=o.op="beforeDestroy",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroy",a.dbg(u,e,n,o),t.utils.resolve(a._destroy(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroy");return c=a.respond(c,o),u=o.op="afterDestroy",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,o){var a=this,u=void 0;return n||(n={}),o||(o={}),u=o.op="beforeDestroyAll",t.utils.resolve(a[u](e,n,o)).then(function(){return u=o.op="destroyAll",a.dbg(u,e,n,o),t.utils.resolve(a._destroyAll(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var c=new r(f,d,"destroyAll");return c=a.respond(c,o),u=o.op="afterDestroyAll",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,o){var a=this,u=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var s=r.map(function(t){return a.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return a.findAll(u,{where:i.defineProperty({},u.idAttribute,{in:s})},o).then(function(e){r.forEach(function(t){e.forEach(function(e){e[u.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var l=function(){var t=r;return{v:a.find(u,a.makeBelongsToForeignKey(e,n,t),o).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof l?"undefined":i.typeof(l))?l.v:void 0},find:function(e,n,o){var a=this,u=void 0,s=void 0;return o||(o={}),o.with||(o.with=[]),s=o.op="beforeFind",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="find",a.dbg(s,e,n,o),t.utils.resolve(a._find(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];if(s){u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasOne"===t.type?a.loadHasOne(e,t,u,n):a.loadHasMany(e,t,u,n),r&&l.push(r)}),Promise.all(l)}}).then(function(){var i=new r(u,{},"find");return i.found=u?1:0,i=a.respond(i,o),s=o.op="afterFind",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},findAll:function(e,n,o){var a=this;o||(o={}),o.with||(o.with=[]);var u=[],s=void 0,l=o._activeWith;if(t.utils.isObject(l)){var f=l.query||{};l.replace?n=f:t.utils.deepFillIn(n,f)}return s=o.op="beforeFindAll",t.utils.resolve(a[s](e,n,o)).then(function(){return s=o.op="findAll",a.dbg(s,e,n,o),t.utils.resolve(a._findAll(e,n,o))}).then(function(n){var r=i.slicedToArray(n,1),s=r[0];s||(s=[]),u=s;var l=[];return t.utils.forEachRelation(e,o,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=a.loadHasManyLocalKeys(e,t,u,n):"hasMany"===t.type&&t.foreignKeys?r=a.loadHasManyForeignKeys(e,t,u,n):"belongsTo"===t.type&&(r=a.loadBelongsTo(e,t,u,n)):r="hasMany"===t.type?a.loadHasMany(e,t,u,n):a.loadHasOne(e,t,u,n),r&&l.push(r)}),Promise.all(l)}).then(function(){var i=new r(u,{},"findAll");return i.found=u.length,i=a.respond(i,o),s=o.op="afterFindAll",t.utils.resolve(a[s](e,n,o,i)).then(function(e){return t.utils.isUndefined(e)?i:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,o){var a=this,s=void 0,l=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s)return a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:a.makeHasManyLocalKeys(e,n,s)})},o).then(function(e){n.setLocalField(s,e)});var f=function(){var s=[];return r.forEach(function(t){s=s.concat(a.self.makeHasManyLocalKeys(e,n,t))}),{v:a.findAll(l,{where:i.defineProperty({},l.idAttribute,{in:u(s).filter(function(e){return e})})},o).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[l.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof f?"undefined":i.typeof(f))?f.v:void 0},loadHasManyForeignKeys:function(e,n,r,o){var a=this,u=n.getRelation(),s=e.idAttribute,l=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(l=r),l?a.findAll(n.getRelation(),{where:i.defineProperty({},n.foreignKeys,{contains:a.makeHasManyForeignKeys(e,n,l)})},o).then(function(e){n.setLocalField(l,e)}):a.findAll(u,{where:i.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return a.makeHasManyForeignKeys(e,n,t)})})},o).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,s);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),u(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,o,a){var u=this,s=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return o||(o={}),a||(a={}),s=a.op="beforeSum",t.utils.resolve(u[s](e,n,o,a)).then(function(){return s=a.op="sum",u.dbg(s,e,n,o,a),t.utils.resolve(u._sum(e,n,o,a))}).then(function(l){var f=i.slicedToArray(l,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,s);return p=u.respond(p,a),s=a.op="afterSum",t.utils.resolve(u[s](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,o,a){var u=this;o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdate",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return o=t.utils.isUndefined(r)?o:r,o=s(e,o),l=a.op="update",u.dbg(l,e,n,o,a),t.utils.resolve(u._update(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];c||(c={});var p=new r(d,c,"update");return p.updated=d?1:0,p=u.respond(p,a),l=a.op="afterUpdate",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,o,a){var u=this;n||(n={}),o||(o={}),a||(a={});var l=void 0;return l=a.op="beforeUpdateAll",t.utils.resolve(u[l](e,n,o,a)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=s(e,n),l=a.op="updateAll",u.dbg(l,e,n,o,a),t.utils.resolve(u._updateAll(e,n,o,a))}).then(function(s){var f=i.slicedToArray(s,2),d=f[0],c=f[1];d||(d=[]),c||(c={});var p=new r(d,c,"updateAll");return p.updated=d.length,p=u.respond(p,a),l=a.op="afterUpdateAll",t.utils.resolve(u[l](e,n,o,a,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,o){var a=this;n||(n=[]),o||(o={});var u=void 0,l=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,l)}),u=o.op="beforeUpdateMany",t.utils.resolve(a[u](e,n,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return s(e,t)}),u=o.op="updateMany",a.dbg(u,e,n,o),t.utils.resolve(a._updateMany(e,n,o))}).then(function(s){var l=i.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var c=new r(f,d,"updateMany");return c.updated=f.length,c=a.respond(c,o),u=o.op="afterUpdateMany",t.utils.resolve(a[u](e,n,o,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}}),e.noop=o,e.noop2=a,e.unique=u,e.withoutRelations=s,e.Adapter=n,e.reserved=f,e.Response=r})},function(e,t){e.exports=void 0}])}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,g),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function i(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(i).join(t)}function a(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function s(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(u(n)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var r=this;e||(e={}),t.utils.fillIn(e,A),n.call(r,e)}function f(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":c.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var u=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var l=[i.basePath||o.basePath||u.basePath,u.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&l.push(r),l.push(n.pathname||e),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){f(t,e)(n)}),n}}var c={};c.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},c.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},c.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var p=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},h=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},y=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},v=function(e,n){return t.utils.omit(n,e.relationFields||[])},g={debug:!1,raw:!1};n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:h,afterCreate:h,afterCreateMany:h,afterDestroy:h,afterDestroyAll:h,afterFind:h,afterFindAll:h,afterSum:h,afterUpdate:h,afterUpdateAll:h,afterUpdateMany:h,beforeCount:p,beforeCreate:p,beforeCreateMany:p,beforeDestroy:p,beforeDestroyAll:p,beforeFind:p,beforeFindAll:p,beforeSum:p,beforeUpdate:p,beforeUpdateAll:p,beforeUpdateMany:p,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="count",o.dbg(a,e,n,i),t.utils.resolve(o._count(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,a);return d=o.respond(d,i),a=i.op="afterCount",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n),a=i.op="create",o.dbg(a,e,n,i),t.utils.resolve(o._create(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"create");return d.created=l?1:0,d=o.respond(d,i),a=i.op="afterCreate",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t)}),a=i.op="createMany",o.dbg(a,e,n,i),t.utils.resolve(o._createMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"createMany");return d.created=l.length,d=o.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var o=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroy",o.dbg(a,e,n,i),t.utils.resolve(o._destroy(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroy");return d=o.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroyAll",o.dbg(a,e,n,i),t.utils.resolve(o._destroyAll(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroyAll");return d=o.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:c.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},find:function(e,n,i){var o=this,a=void 0,u=void 0;return i||(i={}),i.with||(i.with=[]),u=i.op="beforeFind",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="find",o.dbg(u,e,n,i),t.utils.resolve(o._find(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new r(a,{},"find");return s.found=a?1:0,s=o.respond(s,i),u=i.op="afterFind",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,i){var o=this;i||(i={}),i.with||(i.with=[]);var a=[],u=void 0,s=i._activeWith;if(t.utils.isObject(s)){var l=s.query||{};s.replace?n=l:t.utils.deepFillIn(n,l)}return u=i.op="beforeFindAll",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="findAll",o.dbg(u,e,n,i),t.utils.resolve(o._findAll(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new r(a,{},"findAll");return s.found=a.length,s=o.respond(s,i),u=i.op="afterFindAll",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:y(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:c.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:c.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),y(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,i,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,i,o),t.utils.resolve(a._sum(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,u);return p=a.respond(p,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,o){var a=this;i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=v(e,i),u=o.op="update",a.dbg(u,e,n,i,o),t.utils.resolve(a._update(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,"update");return p.updated=f?1:0,p=a.respond(p,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,o){var a=this;n||(n={}),i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n),u=o.op="updateAll",a.dbg(u,e,n,i,o),t.utils.resolve(a._updateAll(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var p=new r(f,d,"updateAll");return p.updated=f.length,p=a.respond(p,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var o=this;n||(n=[]),i||(i={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=i.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t)}),a=i.op="updateMany",o.dbg(a,e,n,i),t.utils.resolve(o._updateMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"updateMany");return d.updated=l.length,d=o.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}});var m=void 0,b=!1;try{b=window&&window.fetch}catch(e){}var T=n.prototype,A={basePath:"",forceTrailingSlash:!1,http:m,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(n.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:n}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:h,afterGET:h,afterHTTP:h,afterPOST:h,afterPUT:h,beforeDEL:p,beforeGET:p,beforeHTTP:p,beforePOST:p,beforePUT:p,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(s(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],u=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,l=e.getRelation(),f=r.params[s];if(f===!1||!s||!l)return f===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(f=f||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),l.idAttribute):null)),f){var d=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,l),u=a(i.getEndpoint(l,f,e),f,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":c.typeof(d)))return d.v}}}),u},getPath:function(e,n,r,i){var o=this;i||(i={});var u=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(r),a.apply(t.utils,u)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var l=e.suffix||n.suffix||i.suffix;if(l&&e.url.substr(e.url.length-l.length)!==l&&(e.url+=l),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,b&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),T.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),T.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.updateMany.call(r,e,t,n)}});var P={beta:6,full:"3.0.0-beta.6",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=f,e.addActions=d,e.version=P}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index 0054279..587364a 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","__WEBPACK_EXTERNAL_MODULE_3__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","_jsData","utils","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_jsDataAdapter","Adapter","_typeof","Symbol","iterator","obj","constructor","axios","hasFetch","fetch","e","__super__","prototype","basePath","forceTrailingSlash","http","httpConfig","suffix","useFetch","Object","create","enumerable","writable","configurable","defineProperty","extend","addHiddenPropsToTarget","afterDEL","noop2","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","noop","beforeGET","beforeHTTP","beforePOST","beforePUT","_count","mapper","query","GET","getPath","then","response","_end","_create","props","POST","serialize","_createMany","_destroy","DEL","_destroyAll","deserialize","_find","_findAll","_sum","field","_update","PUT","_updateAll","_updateMany","records","count","getParams","getSuffix","deepMixIn","queryTransform","createMany","config","op","method","resolve","_config","isUndefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","error","console","_console","apply","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","findAll","getEndpoint","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_ret","_opts","_","isString","isNumber","copy","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","log","reject","payload","cache","timeout","substr","Error","catch","err","responseError","sum","update","updateAll","updateMany","addAction","TypeError","request","adapter","getAdapter","defaultAdapter","isSorN","pathname","addActions","version","beta","full","major","minor","patch","default","global","jsData","Response","meta","babelHelpers","typeof","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","concat","_len2","_key2","unique","array","seen","final","withoutRelations","omit","relationFields","debug","raw","reserved","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","results","_results","respond","_props","_results2","created","map","record","_results3","_results4","_results5","loadBelongsTo","__opts","relationDef","keys","makeBelongsToForeignKey","where","in","relatedItems","relatedItem","setLocalField","with","_results6","_record","tasks","forEachRelation","task","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","level","_len4","_key4","prefix","_console2","_results8","_results9","updated","_results10","_results11"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","omit","relationFields","debug","raw","extend","addHiddenPropsToTarget","prototype","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","isUndefined","create","_props","_create","_results2","created","createMany","map","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","with","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","toUpperCase","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","axios","hasFetch","fetch","e","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","isFunction","error","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","logResponse","str","start","toUTCString","status","Date","getTime","payload","cache","timeout","substr","catch","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index b5fe91c..57ad3fc 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1,3016 +1,1294 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("js-data"), require("axios")); - else if(typeof define === 'function' && define.amd) - define(["js-data", "axios"], factory); - else { - var a = typeof exports === 'object' ? factory(require("js-data"), require("axios")) : factory(root["js-data"], root["axios"]); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - var _jsData = __webpack_require__(1); - - var _jsDataAdapter = __webpack_require__(2); - - /* global fetch:true Headers:true Request:true */ - - var axios = __webpack_require__(3); - - - var hasFetch = false; - - try { - hasFetch = window && window.fetch; - } catch (e) {} - - function isValidString(value) { - return value != null && value !== ''; - } - function join(items, separator) { - separator || (separator = ''); - return items.filter(isValidString).join(separator); - } - function makePath() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - function encode(val) { - return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); - } - - function buildUrl(url, params) { - if (!params) { - return url; - } - - var parts = []; - - _jsData.utils.forOwn(params, function (val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - if (!_jsData.utils.isArray(val)) { - val = [val]; - } - - val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { - v = v.toISOString(); - } else if (_jsData.utils.isObject(v)) { - v = _jsData.utils.toJson(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - if (parts.length > 0) { - url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); - } - - return url; - } - - var __super__ = _jsDataAdapter.Adapter.prototype; - - var DEFAULTS = { - // Default and user-defined settings - /** - * @name HttpAdapter#basePath - * @type {string} - */ - basePath: '', - - /** - * @name HttpAdapter#forceTrailingSlash - * @type {boolean} - * @default false - */ - forceTrailingSlash: false, - - /** - * @name HttpAdapter#http - * @type {Function} - */ - http: axios, - - /** - * @name HttpAdapter#httpConfig - * @type {Object} - */ - httpConfig: {}, - - /** - * @name HttpAdapter#suffix - * @type {string} - */ - suffix: '', - - /** - * @name HttpAdapter#useFetch - * @type {boolean} - * @default false - */ - useFetch: false - }; - - /** - * HttpAdapter class. - * - * @class HttpAdapter - * @extends Adapter - * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO - */ - function HttpAdapter(opts) { - var self = this; - opts || (opts = {}); - _jsData.utils.fillIn(opts, DEFAULTS); - _jsDataAdapter.Adapter.call(self, opts); - } - - /** - * @name module:js-data-http.HttpAdapter - * @see HttpAdapter - */ - exports.HttpAdapter = HttpAdapter; - - // Setup prototype inheritance from Adapter - HttpAdapter.prototype = Object.create(_jsDataAdapter.Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } - }); - - Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: _jsDataAdapter.Adapter - }); - - /** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() - * - * @name HttpAdapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. - */ - HttpAdapter.extend = _jsData.utils.extend; - - _jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { - /** - * @name HttpAdapter#afterDEL - * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterDEL: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterGET - * @method - * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterGET: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterHTTP - * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterHTTP: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterPOST - * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterPOST: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#afterPUT - * @method - * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response - */ - afterPUT: _jsDataAdapter.noop2, - - /** - * @name HttpAdapter#beforeDEL - * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts - */ - beforeDEL: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforeGET - * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts - */ - beforeGET: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforeHTTP - * @method - * @param {Object} config - * @param {Object} opts - */ - beforeHTTP: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforePOST - * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - */ - beforePOST: _jsDataAdapter.noop, - - /** - * @name HttpAdapter#beforePUT - * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - */ - beforePUT: _jsDataAdapter.noop, - - _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _end: function _end(mapper, opts, response) { - return [this.deserialize(mapper, response, opts), response]; - }, - _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); - }); - }, - - - /** - * Retrieve the number of records that match the selection `query`. - * - * @name HttpAdapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); - }, - - - /** - * Create a new the record from the provided `props`. - * - * @name HttpAdapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); - }, - - - /** - * Create multiple new records in batch. - * - * @name HttpAdapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); - }, - - - /** - * Make an Http request to `url` according to the configuration in `config`. - * - * @name HttpAdapter#DEL - * @method - * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to - * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - DEL: function DEL(url, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'delete'; - - // beforeDEL lifecycle hook - op = opts.op = 'beforeDEL'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterDEL lifecycle hook - op = opts.op = 'afterDEL'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Transform the server response object into the payload that will be returned - * to JSData. - * - * @name HttpAdapter#deserialize - * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. - */ - deserialize: function deserialize(mapper, response, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.deserialize)) { - return opts.deserialize(mapper, response, opts); - } - if (_jsData.utils.isFunction(mapper.deserialize)) { - return mapper.deserialize(mapper, response, opts); - } - if (response && response.hasOwnProperty('data')) { - return response.data; - } - return response; - }, - - - /** - * Destroy the record with the given primary key. - * - * @name HttpAdapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); - }, - - - /** - * Destroy the records that match the selection `query`. - * - * @name HttpAdapter#destroyAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); - }, - - - /** - * Log an error. - * - * @name HttpAdapter#error - * @method - * @param {...*} [args] Arguments to log. - */ - error: function error() { - if (console) { - var _console; - - (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); - } - }, - - - /** - * Make an Http request using `window.fetch`. - * - * @name HttpAdapter#fetch - * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. - * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. - * @param {string} config.url Url for the request. - * @param {Object} [opts] Configuration options. - */ - fetch: function (_fetch) { - function fetch(_x, _x2) { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function (config, opts) { - var requestConfig = { - method: config.method, - // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) - }; - - if (config.data) { - requestConfig.body = _jsData.utils.toJson(config.data); - } - - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { - response.config = { - method: config.method, - url: config.url - }; - return response.json().then(function (data) { - response.data = data; - return response; - }); - }); - }), - - - /** - * Retrieve the record with the given primary key. - * - * @name HttpAdapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); - }, - - - /** - * Retrieve the records that match the selection `query`. - * - * @name HttpAdapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#GET - * @method - * @param {string} url The url for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - GET: function GET(url, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'get'; - - // beforeGET lifecycle hook - op = opts.op = 'beforeGET'; - return _jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterGET lifecycle hook - op = opts.op = 'afterGET'; - return _jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * @name HttpAdapter#getEndpoint - * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO - * @return {string} Full path. - */ - getEndpoint: function getEndpoint(mapper, id, opts) { - var self = this; - opts || (opts = {}); - opts.params = _jsData.utils.isUndefined(opts.params) ? {} : opts.params; - var relationList = mapper.relationList || []; - var endpoint = _jsData.utils.isUndefined(opts.endpoint) ? _jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; - - relationList.forEach(function (def) { - if (def.type !== 'belongsTo' || !def.parent) { - return; - } - var item = void 0; - var parentKey = def.foreignKey; - var parentDef = def.getRelation(); - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete opts.params[parentKey]; - } - return false; - } else { - delete opts.params[parentKey]; - - if (_jsData.utils.isObject(id)) { - item = id; - } - - if (item) { - parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? _jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); - } - - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - _jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - _jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - } - }); - - return endpoint; - }, - - - /** - * @name HttpAdapter#getPath - * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO - * @param {Object} opts Configuration options. - */ - getPath: function getPath(method, mapper, id, opts) { - var self = this; - opts || (opts = {}); - var args = [_jsData.utils.isUndefined(opts.basePath) ? _jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, _jsData.utils.isString(id) || _jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(_jsData.utils, args); - }, - getParams: function getParams(opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.params)) { - return {}; - } - return _jsData.utils.copy(opts.params); - }, - getSuffix: function getSuffix(mapper, opts) { - opts || (opts = {}); - if (_jsData.utils.isUndefined(opts.suffix)) { - if (_jsData.utils.isUndefined(mapper.suffix)) { - return this.suffix; - } - return mapper.suffix; - } - return opts.suffix; - }, - - - /** - * Make an Http request. - * - * @name HttpAdapter#HTTP - * @method - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - HTTP: function HTTP(config, opts) { - var self = this; - var start = new Date(); - opts || (opts = {}); - var payload = config.data; - var cache = config.cache; - var timeout = config.timeout; - config = _jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = _jsData.utils.deepMixIn(config, self.httpConfig); - config.data = payload; - config.cache = cache; - config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - - function logResponse(data) { - var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); - } - return data; - } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); - } - return _jsData.utils.reject(data); - } - } - - if (!self.http) { - throw new Error('You have not configured this adapter with an http library!'); - } - - return _jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { - config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); - } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); - }); - }).then(function (response) { - return _jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#POST - * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - POST: function POST(url, data, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'post'; - - // beforePOST lifecycle hook - op = opts.op = 'beforePOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPOST lifecycle hook - op = opts.op = 'afterPOST'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#PUT - * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - PUT: function PUT(url, data, config, opts) { - var self = this; - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'put'; - - // beforePUT lifecycle hook - op = opts.op = 'beforePUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _jsData.utils.isUndefined(_config) ? config : _config; - op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); - }).then(function (response) { - // afterPUT lifecycle hook - op = opts.op = 'afterPUT'; - return _jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return _jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * TODO - * - * @name HttpAdapter#queryTransform - * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO - * @return {*} Transformed params. - */ - queryTransform: function queryTransform(mapper, params, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.queryTransform)) { - return opts.queryTransform(mapper, params, opts); - } - if (_jsData.utils.isFunction(mapper.queryTransform)) { - return mapper.queryTransform(mapper, params, opts); - } - return params; - }, - - - /** - * Error handler invoked when the promise returned by {@link HttpAdapter#http} - * is rejected. Default implementation is to just return the error wrapped in - * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is - * called by {@link HttpAdapter#HTTP}. - * - * @name HttpAdapter#responseError - * @method - * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. - * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. - * @return {Promise} - */ - responseError: function responseError(err, config, opts) { - return _jsData.utils.reject(err); - }, - - - /** - * TODO - * - * @name HttpAdapter#serialize - * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO - * @return {*} Serialized data. - */ - serialize: function serialize(mapper, data, opts) { - opts || (opts = {}); - if (_jsData.utils.isFunction(opts.serialize)) { - return opts.serialize(mapper, data, opts); - } - if (_jsData.utils.isFunction(mapper.serialize)) { - return mapper.serialize(mapper, data, opts); - } - return data; - }, - - - /** - * Retrieve the sum of the field of the records that match the selection query. - * - * @name HttpAdapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field The field to sum. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - if (!_jsData.utils.utils.isString(field)) { - throw new Error('field must be a string!'); - } - opts.params = self.getParams(opts); - opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#update - * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); - }, - - - /** - * TODO - * - * @name HttpAdapter#updateAll - * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO - * @param {Object} [opts] Configuration options. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var self = this; - query || (query = {}); - opts || (opts = {}); - opts.params = self.getParams(opts); - _jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); - }, - - - /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. - * - * @name HttpAdapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Array} records Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var self = this; - opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); - } - }); - - /** - * Add an Http actions to a mapper. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * // GET /reports/schools/:school_id/teachers - * addAction('getTeacherReports', { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) - * - * @name module:js-data-http.addAction - * @method - * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - exports.addAction = function addAction(name, opts) { - if (!name || !_jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); - } - return function (mapper) { - if (mapper[name]) { - throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); - } - opts.request = opts.request || function (config) { - return config; - }; - opts.response = opts.response || function (response) { - return response; - }; - opts.responseError = opts.responseError || function (err) { - return _jsData.utils.reject(err); - }; - mapper[name] = function (id, _opts) { - var self = this; - if (_jsData.utils.isObject(id)) { - _opts = id; - } - _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); - var config = {}; - _jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } - if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); - } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, _jsData.utils.isSorN(id) ? id : null, _opts)]; - if (_jsData.utils.isSorN(id)) { - args.push(id); - } - args.push(opts.pathname || name); - config.url = makePath.apply(null, args); - } - config.method = config.method || 'GET'; - config.mapper = self.name; - _jsData.utils.deepMixIn(config, _opts); - return _jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.mapper = self.name; - } - return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); - }; - return mapper; - }; - }; - - /** - * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for - * action configuration options. - * - * @example - * // CommonJS - * var JSData = require('js-data') - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore - * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions - * - * var adapter = new HttpAdapter() - * var store = new DataStore() - * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') - * - * addActions({ - * // GET /reports/schools/:school_id/teachers - * getTeacherReports: { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * } - * })(store.getMapper('school')) - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { - * // ... - * }) - * - * @name module:js-data-http.addActions - * @method - * @param {Object.} opts Object where the key is an action name - * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - exports.addActions = function addActions(opts) { - opts || (opts = {}); - return function (mapper) { - _jsData.utils.forOwn(opts, function (value, key) { - exports.addAction(key, value)(mapper); - }); - return mapper; - }; - }; - - /** - * Details of the current version of the `js-data-http` module. - * - * @name module:js-data-http.version - * @type {Object} - * @property {string} version.full The full semver value. - * @property {number} version.major The major version number. - * @property {number} version.minor The minor version number. - * @property {number} version.patch The patch version number. - * @property {(string|boolean)} version.alpha The alpha version value, - * otherwise `false` if the current version is not alpha. - * @property {(string|boolean)} version.beta The beta version value, - * otherwise `false` if the current version is not beta. - */ - exports.version = { - beta: 5, - full: '3.0.0-beta.5', +'use strict'; + +var jsData = require('js-data'); +var jsDataAdapter = require('js-data-adapter'); + +var babelHelpers = {}; +babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; +}; +babelHelpers; + +var axios = require('axios'); +var hasFetch = false; + +try { + hasFetch = window && window.fetch; +} catch (e) {} + +function isValidString(value) { + return value != null && value !== ''; +} +function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); +} +function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); +} + +function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); +} + +function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (jsData.utils.isObject(v)) { + v = jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; +} + +var __super__ = jsDataAdapter.Adapter.prototype; + +var DEFAULTS = { + // Default and user-defined settings + /** + * @name HttpAdapter#basePath + * @type {string} + */ + basePath: '', + + /** + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + */ + forceTrailingSlash: false, + + /** + * @name HttpAdapter#http + * @type {Function} + */ + http: axios, + + /** + * @name HttpAdapter#httpConfig + * @type {Object} + */ + httpConfig: {}, + + /** + * @name HttpAdapter#suffix + * @type {string} + */ + suffix: '', + + /** + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + */ + useFetch: false +}; + +/** + * HttpAdapter class. + * + * @class HttpAdapter + * @extends Adapter + * @param {Object} [opts] Configuration options. + * @param {string} [opts.basePath=''] TODO + * @param {boolean} [opts.debug=false] TODO + * @param {boolean} [opts.forceTrailingSlash=false] TODO + * @param {Object} [opts.http=axios] TODO + * @param {Object} [opts.httpConfig={}] TODO + * @param {string} [opts.suffix=''] TODO + * @param {boolean} [opts.useFetch=false] TODO + */ +function HttpAdapter(opts) { + var self = this; + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS); + jsDataAdapter.Adapter.call(self, opts); +} + +/** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + +// Setup prototype inheritance from Adapter +HttpAdapter.prototype = Object.create(jsDataAdapter.Adapter.prototype, { + constructor: { + value: HttpAdapter, + enumerable: false, + writable: true, + configurable: true + } +}); + +Object.defineProperty(HttpAdapter, '__super__', { + configurable: true, + value: jsDataAdapter.Adapter +}); + +/** + * Alternative to ES6 class syntax for extending `HttpAdapter`. + * + * @example Using the ES2015 class syntax. + * class MyHttpAdapter extends HttpAdapter {...} + * const adapter = new MyHttpAdapter() + * + * @example Using {@link HttpAdapter.extend}. + * var instanceProps = {...} + * var classProps = {...} + * + * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) + * var adapter = new MyHttpAdapter() + * + * @name HttpAdapter.extend + * @method + * @param {Object} [instanceProps] Properties that will be added to the + * prototype of the subclass. + * @param {Object} [classProps] Properties that will be added as static + * properties to the subclass itself. + * @return {Object} Subclass of `HttpAdapter`. + */ +HttpAdapter.extend = jsData.utils.extend; + +jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterGET: jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterHTTP: jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPOST: jsDataAdapter.noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterPUT: jsDataAdapter.noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeGET: jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {Object} config + * @param {Object} opts + */ + beforeHTTP: jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePOST: jsDataAdapter.noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {Object} url + * @param {Object} data + * @param {Object} config + * @param {Object} opts + */ + beforePUT: jsDataAdapter.noop, + + _count: function _count(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var self = this; + return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var self = this; + return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var self = this; + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var self = this; + return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var self = this; + return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var self = this; + return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var self = this; + return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var self = this; + return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var self = this; + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { + return self._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params.count = true; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.count.call(self, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props Properties to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.create.call(self, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} props Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.createMany.call(self, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {Object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'DEL'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {Object} mapper The mapper used for the operation. + * @param {Object} response Response object from {@link HttpAdapter#HTTP}. + * @param {Object} opts Configuration options. + * @return {(Object|Array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroy.call(self, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.destroyAll.call(self, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {Object} config Request configuration. + * @param {Object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {Object} config.headers Headers for the request. + * @param {Object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + * @param {Object} [opts] Configuration options. + */ + fetch: function (_fetch) { + function fetch(_x, _x2) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config, opts) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers) + }; + + if (config.data) { + requestConfig.body = jsData.utils.toJson(config.data); + } + + return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.find.call(self, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.findAll.call(self, mapper, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'GET'; + self.dbg(op, url, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var self = this; + opts || (opts = {}); + opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + jsData.utils._(_opts, parentDef); + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return { + v: false + }; + }(); + + if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + var self = this; + opts || (opts = {}); + var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.params)) { + return {}; + } + return jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (jsData.utils.isUndefined(opts.suffix)) { + if (jsData.utils.isUndefined(mapper.suffix)) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var self = this; + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = jsData.utils.deepMixIn(config, self.httpConfig); + config.data = payload; + config.cache = cache; + config.timeout = timeout; + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || self.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (self.log) { + self.dbg('debug', str, data); + } + return data; + } else { + if (self.error) { + self.error('\'FAILED: ' + str, data); + } + return jsData.utils.reject(data); + } + } + + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } + + return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { + return self.fetch(config, opts).then(logResponse, logResponse); + } + return self.http(config).then(logResponse, logResponse).catch(function (err) { + return self.responseError(err, config, opts); + }); + }).then(function (response) { + return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'POST'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var self = this; + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = jsData.utils.isUndefined(_config) ? config : _config; + op = opts.op = 'PUT'; + self.dbg(op, url, data, config, opts); + return self.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return jsData.utils.isUndefined(_response) ? response : _response; + }); + }); + }, + + + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return jsData.utils.reject(err); + }, + + + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field The field to sum. + * @param {Object} query Selection query. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + if (!jsData.utils.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = self.getParams(opts); + opts.params.sum = field; + opts.suffix = self.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + + return __super__.sum.call(self, mapper, field, query, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.update.call(self, mapper, id, props, opts); + }, + + + /** + * TODO + * + * @name HttpAdapter#updateAll + * @method + * @param {Object} mapper TODO + * @param {Object} props TODO + * @param {Object} query TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var self = this; + query || (query = {}); + opts || (opts = {}); + opts.params = self.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateAll.call(self, mapper, props, query, opts); + }, + + + /** + * Update multiple records in batch. + * + * {@link HttpAdapter#beforeUpdateMany} will be called before calling + * {@link HttpAdapter#PUT}. + * {@link HttpAdapter#afterUpdateMany} will be called after calling + * {@link HttpAdapter#PUT}. + * + * @name HttpAdapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Array} records Array of property objects to send as the payload. + * @param {Object} [opts] Configuration options. + * @param {string} [opts.params] TODO + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var self = this; + opts || (opts = {}); + opts.params = self.getParams(opts); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = self.getSuffix(mapper, opts); + + return __super__.updateMany.call(self, mapper, records, opts); + } +}); + +/** + * Add an Http actions to a mapper. + * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addAction = JSDataHttp.addAction + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {Object} [opts] Action configuration + * @param {string} [opts.adapter] + * @param {string} [opts.pathname] + * @param {Function} [opts.request] + * @param {Function} [opts.response] + * @param {Function} [opts.responseError] + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addAction(name, opts) { + if (!name || !jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (jsData.utils.isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + jsData.utils.fillIn(config, opts); + if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { + _opts.endpoint = config.endpoint; + } + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(self, _opts); + } else { + var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + if (jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + config.method = config.method || 'GET'; + config.mapper = self.name; + jsData.utils.deepMixIn(config, _opts); + return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = self.name; + } + return data; + }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }; + return mapper; + }; +} + +/** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @example + * // CommonJS + * var JSData = require('js-data') + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore + * + * var JSDataHttp = require('js-data-http') + * var HttpAdapter = JSDataHttp.HttpAdapter + * var addActions = JSDataHttp.addActions + * + * var adapter = new HttpAdapter() + * var store = new DataStore() + * + * store.registerAdapter('http', adapter, { default: true }) + * store.defineMapper('school') + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')) + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * // ... + * }) + * + * @name module:js-data-http.addActions + * @method + * @param {Object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {Function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + jsData.utils.forOwn(opts, function (value, key) { + addAction(key, value)(mapper); + }); + return mapper; + }; +} + +/** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {Object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ +var version = { + beta: 6, + full: '3.0.0-beta.6', major: 3, minor: 0, patch: 0 }; - - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() - * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() - * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * // ... - * }) - * - * @module js-data-http - */ - exports.default = HttpAdapter; - -/***/ }, -/* 1 */ -/***/ function(module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_1__; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - (function (global, factory) { - true ? factory(exports, __webpack_require__(1)) : - typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) : - (factory((global.Adapter = global.Adapter || {}),global.JSData)); - }(this, function (exports,jsData) { 'use strict'; - - var babelHelpers = {}; - babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; - - babelHelpers.defineProperty = function (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; - }; - - babelHelpers.slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (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"); - } - }; - }(); - - babelHelpers; - - var noop = function noop() { - var self = this; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var opts = args[args.length - 1]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var noop2 = function noop2() { - var self = this; - - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var opts = args[args.length - 2]; - self.dbg.apply(self, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - - var unique = function unique(array) { - var seen = {}; - var final = []; - array.forEach(function (item) { - if (item in seen) { - return; - } - final.push(item); - seen[item] = 0; - }); - return final; - }; - - var withoutRelations = function withoutRelations(mapper, props) { - return jsData.utils.omit(props, mapper.relationFields || []); - }; - - var DEFAULTS = { - /** - * Whether to log debugging information. - * - * @name Adapter#debug - * @type {boolean} - * @default false - */ - debug: false, - - /** - * Whether to return a more detailed response object. - * - * @name Adapter#raw - * @type {boolean} - * @default false - */ - raw: false - }; - - /** - * Abstract class meant to be extended by adapters. - * - * @class Adapter - * @abstract - * @param {Object} [opts] Configuration opts. - * @param {boolean} [opts.debug=false] Whether to log debugging information. - * @param {boolean} [opts.raw=false] Whether to return a more detailed response - * object. - */ - function Adapter(opts) { - var self = this; - opts || (opts = {}); - jsData.utils.fillIn(opts, DEFAULTS); - jsData.utils.fillIn(self, opts); - } - - var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where']; - - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - var self = this; - meta || (meta = {}); - - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - self.data = data; - - jsData.utils.fillIn(self, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - self.op = op; - } - - /** - * Alternative to ES6 class syntax for extending `Adapter`. - * - * @name Adapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `Adapter`. - */ - Adapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#afterCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} props The `props` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `afterCount` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterCount: noop2, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `afterCreate` - * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreate: noop2, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `afterCreateMany` - * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreateMany: noop2, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#afterDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `afterDestroy` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroy: noop2, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#afterDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `afterDestroyAll` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroyAll: noop2, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#afterFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `afterFind` - * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. - */ - afterFind: noop2, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#afterFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `afterFindAll` - * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. - */ - afterFindAll: noop2, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#afterSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {string} field The `field` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `afterSum` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterSum: noop2, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#afterUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `afterUpdate` - * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdate: noop2, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#afterUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `afterUpdateAll` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateAll: noop2, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#afterUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} records The `records` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `afterUpdateMany` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateMany: noop2, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#beforeCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} query The `query` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `beforeCount` - */ - beforeCount: noop, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#beforeCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `beforeCreate` - */ - beforeCreate: noop, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#beforeCreateMany - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `beforeCreateMany` - */ - beforeCreateMany: noop, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#beforeDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `beforeDestroy` - */ - beforeDestroy: noop, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#beforeDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `beforeDestroyAll` - */ - beforeDestroyAll: noop, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#beforeFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `beforeFind` - */ - beforeFind: noop, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#beforeFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `beforeFindAll` - */ - beforeFindAll: noop, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#beforeSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `beforeSum` - */ - beforeSum: noop, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#beforeUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `beforeUpdate` - */ - beforeUpdate: noop, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#beforeUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `beforeUpdateAll` - */ - beforeUpdateAll: noop, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#beforeUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} props The `props` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `beforeUpdateMany` - */ - beforeUpdateMany: noop, - - /** - * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. - * - * @name Adapter#dbg - * @method - */ - dbg: function dbg() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['debug'].concat(args)); - }, - - - /** - * Retrieve the number of records that match the selection query. Called by - * `Mapper#count`. - * - * @name Adapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeCount lifecycle hook - op = opts.op = 'beforeCount'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'count'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._count(mapper, query, opts)); - }).then(function (results) { - var _results = babelHelpers.slicedToArray(results, 2); - - var data = _results[0]; - var result = _results[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterCount lifecycle hook - op = opts.op = 'afterCount'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create a new record. Called by `Mapper#create`. - * - * @name Adapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The record to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreate lifecycle hook - op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'create'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._create(mapper, props, opts)); - }).then(function (results) { - var _results2 = babelHelpers.slicedToArray(results, 2); - - var data = _results2[0]; - var result = _results2[1]; - - result || (result = {}); - var response = new Response(data, result, 'create'); - response.created = data ? 1 : 0; - response = self.respond(response, opts); - - // afterCreate lifecycle hook - op = opts.op = 'afterCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Create multiple records in a single batch. Called by `Mapper#createMany`. - * - * @name Adapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The records to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var self = this; - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreateMany lifecycle hook - op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = props.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'createMany'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._createMany(mapper, props, opts)); - }).then(function (results) { - var _results3 = babelHelpers.slicedToArray(results, 2); - - var data = _results3[0]; - var result = _results3[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'createMany'); - response.created = data.length; - response = self.respond(response, opts); - - // afterCreateMany lifecycle hook - op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the record with the given primary key. Called by - * `Mapper#destroy`. - * - * @name Adapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var self = this; - var op = void 0; - opts || (opts = {}); - - // beforeDestroy lifecycle hook - op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'destroy'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._destroy(mapper, id, opts)); - }).then(function (results) { - var _results4 = babelHelpers.slicedToArray(results, 2); - - var data = _results4[0]; - var result = _results4[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroy'); - response = self.respond(response, opts); - - // afterDestroy lifecycle hook - op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Destroy the records that match the selection query. Called by - * `Mapper#destroyAll`. - * - * @name Adapter#destroyAll - * @method - * @param {Object} mapper the mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var self = this; - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeDestroyAll lifecycle hook - op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'destroyAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); - }).then(function (results) { - var _results5 = babelHelpers.slicedToArray(results, 2); - - var data = _results5[0]; - var result = _results5[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroyAll'); - response = self.respond(response, opts); - - // afterDestroyAll lifecycle hook - op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Load a belongsTo relationship. - * - * Override with care. - * - * @name Adapter#loadBelongsTo - * @method - * @return {Promise} - */ - loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var self = this; - var relationDef = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - var _ret = function () { - var record = records; - return { - v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { - def.setLocalField(record, relatedItem); - }) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; - } else { - var keys = records.map(function (record) { - return self.makeBelongsToForeignKey(mapper, def, record); - }).filter(function (key) { - return key; - }); - return self.findAll(relationDef, { - where: babelHelpers.defineProperty({}, relationDef.idAttribute, { - 'in': keys - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (record) { - relatedItems.forEach(function (relatedItem) { - if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { - def.setLocalField(record, relatedItem); - } - }); - }); - }); - } - }, - - - /** - * Retrieve the record with the given primary key. Called by `Mapper#find`. - * - * @name Adapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var self = this; - var record = void 0, - op = void 0; - opts || (opts = {}); - opts.with || (opts.with = []); - - // beforeFind lifecycle hook - op = opts.op = 'beforeFind'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { - op = opts.op = 'find'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._find(mapper, id, opts)); - }).then(function (results) { - var _results6 = babelHelpers.slicedToArray(results, 1); - - var _record = _results6[0]; - - if (!_record) { - return; - } - record = _record; - var tasks = []; - - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasOne') { - task = self.loadHasOne(mapper, def, record, __opts); - } else { - task = self.loadHasMany(mapper, def, record, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, record, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, record, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, record, __opts); - } - if (task) { - tasks.push(task); - } - }); - - return Promise.all(tasks); - }).then(function () { - var response = new Response(record, {}, 'find'); - response.found = record ? 1 : 0; - response = self.respond(response, opts); - - // afterFind lifecycle hook - op = opts.op = 'afterFind'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Retrieve the records that match the selection query. - * - * @name Adapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var self = this; - opts || (opts = {}); - opts.with || (opts.with = []); - - var records = []; - var op = void 0; - var activeWith = opts._activeWith; - - if (jsData.utils.isObject(activeWith)) { - var activeQuery = activeWith.query || {}; - if (activeWith.replace) { - query = activeQuery; - } else { - jsData.utils.deepFillIn(query, activeQuery); - } - } - - // beforeFindAll lifecycle hook - op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { - op = opts.op = 'findAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._findAll(mapper, query, opts)); - }).then(function (results) { - var _results7 = babelHelpers.slicedToArray(results, 1); - - var _records = _results7[0]; - - _records || (_records = []); - records = _records; - var tasks = []; - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasMany') { - task = self.loadHasMany(mapper, def, records, __opts); - } else { - task = self.loadHasOne(mapper, def, records, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, records, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, records, __opts); - } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, records, __opts); - } - if (task) { - tasks.push(task); - } - }); - return Promise.all(tasks); - }).then(function () { - var response = new Response(records, {}, 'findAll'); - response.found = records.length; - response = self.respond(response, opts); - - // afterFindAll lifecycle hook - op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Resolve the value of the specified option based on the given options and - * this adapter's settings. Override with care. - * - * @name Adapter#getOpt - * @method - * @param {string} opt The name of the option. - * @param {Object} [opts] Configuration options. - * @return {*} The value of the specified option. - */ - getOpt: function getOpt(opt, opts) { - opts || (opts = {}); - return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); - }, - - - /** - * Load a hasMany relationship. - * - * Override with care. - * - * @name Adapter#loadHasMany - * @method - * @return {Promise} - */ - loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var self = this; - var singular = false; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - singular = true; - records = [records]; - } - var IDs = records.map(function (record) { - return self.makeHasManyForeignKey(mapper, def, record); - }); - var query = { - where: {} - }; - var criteria = query.where[def.foreignKey] = {}; - if (singular) { - // more efficient query when we only have one record - criteria['=='] = IDs[0]; - } else { - criteria['in'] = IDs.filter(function (id) { - return id; - }); - } - return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { - records.forEach(function (record) { - var attached = []; - // avoid unneccesary iteration when we only have one record - if (singular) { - attached = relatedItems; - } else { - relatedItems.forEach(function (relatedItem) { - if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { - attached.push(relatedItem); - } - }); - } - def.setLocalField(record, attached); - }); - }); - }, - loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var self = this; - var record = void 0; - var relatedMapper = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - - if (record) { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': self.makeHasManyLocalKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - var _ret2 = function () { - var localKeys = []; - records.forEach(function (record) { - localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); - }); - return { - v: self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': unique(localKeys).filter(function (x) { - return x; - }) - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (item) { - var attached = []; - var itemKeys = jsData.utils.get(item, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - relatedItems.forEach(function (relatedItem) { - if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { - attached.push(relatedItem); - } - }); - def.setLocalField(item, attached); - }); - return relatedItems; - }) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; - } - }, - loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var self = this; - var relatedMapper = def.getRelation(); - var idAttribute = mapper.idAttribute; - var record = void 0; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - - if (record) { - return self.findAll(def.getRelation(), { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'contains': self.makeHasManyForeignKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'isectNotEmpty': records.map(function (record) { - return self.makeHasManyForeignKeys(mapper, def, record); - }) - }) - }, __opts).then(function (relatedItems) { - var foreignKeysField = def.foreignKeys; - records.forEach(function (record) { - var _relatedItems = []; - var id = jsData.utils.get(record, idAttribute); - relatedItems.forEach(function (relatedItem) { - var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; - if (foreignKeys.indexOf(id) !== -1) { - _relatedItems.push(relatedItem); - } - }); - def.setLocalField(record, _relatedItems); - }); - }); - } - }, - - - /** - * Load a hasOne relationship. - * - * Override with care. - * - * @name Adapter#loadHasOne - * @method - * @return {Promise} - */ - loadHasOne: function loadHasOne(mapper, def, records, __opts) { - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - records = [records]; - } - return this.loadHasMany(mapper, def, records, __opts).then(function () { - records.forEach(function (record) { - var relatedData = def.getLocalField(record); - if (jsData.utils.isArray(relatedData) && relatedData.length) { - def.setLocalField(record, relatedData[0]); - } - }); - }); - }, - - - /** - * Logging utility method. Override this method if you want to send log - * messages to something other than the console. - * - * @name Adapter#log - * @method - * @param {string} level Log level. - * @param {...*} values Values to log. - */ - log: function log(level) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - if (level && !args.length) { - args.push(level); - level = 'debug'; - } - if (level === 'debug' && !this.debug) { - return; - } - var prefix = level.toUpperCase() + ': (Adapter)'; - if (console[level]) { - var _console; - - (_console = console)[level].apply(_console, [prefix].concat(args)); - } else { - var _console2; - - (_console2 = console).log.apply(_console2, [prefix].concat(args)); - } - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * There may be reasons why you may want to override this method, like when - * the id of the parent doesn't exactly match up to the key on the child. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKey - * @method - * @return {*} - */ - makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Return the localKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyLocalKeys - * @method - * @return {*} - */ - makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { - var localKeys = []; - var itemKeys = jsData.utils.get(record, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - localKeys = localKeys.concat(itemKeys); - return unique(localKeys).filter(function (x) { - return x; - }); - }, - - - /** - * Return the foreignKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKeys - * @method - * @return {*} - */ - makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { - return jsData.utils.get(record, mapper.idAttribute); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeBelongsToForeignKey - * @method - * @return {*} - */ - makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Retrieve sum of the specified field of the records that match the selection - * query. Called by `Mapper#sum`. - * - * @name Adapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field By to sum. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var self = this; - var op = void 0; - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); - } - query || (query = {}); - opts || (opts = {}); - - // beforeSum lifecycle hook - op = opts.op = 'beforeSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'sum'; - self.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(self._sum(mapper, field, query, opts)); - }).then(function (results) { - var _results8 = babelHelpers.slicedToArray(results, 2); - - var data = _results8[0]; - var result = _results8[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = self.respond(response, opts); - - // afterSum lifecycle hook - op = opts.op = 'afterSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * @name Adapter#respond - * @method - * @param {Object} response Response object. - * @param {Object} opts Configuration options. - * return {Object} If `opts.raw == true` then return `response`, else return - * `response.data`. - */ - respond: function respond(response, opts) { - return this.getOpt('raw', opts) ? response : response.data; - }, - - - /** - * Apply the given update to the record with the specified primary key. Called - * by `Mapper#update`. - * - * @name Adapter#update - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id The primary key of the record to be updated. - * @param {Object} props The update to apply to the record. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var self = this; - props || (props = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdate lifecycle hook - op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'update'; - self.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(self._update(mapper, id, props, opts)); - }).then(function (results) { - var _results9 = babelHelpers.slicedToArray(results, 2); - - var data = _results9[0]; - var result = _results9[1]; - - result || (result = {}); - var response = new Response(data, result, 'update'); - response.updated = data ? 1 : 0; - response = self.respond(response, opts); - - // afterUpdate lifecycle hook - op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Apply the given update to all records that match the selection query. - * Called by `Mapper#updateAll`. - * - * @name Adapter#updateAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The update to apply to the selected records. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var self = this; - props || (props = {}); - query || (query = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdateAll lifecycle hook - op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); - op = opts.op = 'updateAll'; - self.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); - }).then(function (results) { - var _results10 = babelHelpers.slicedToArray(results, 2); - - var data = _results10[0]; - var result = _results10[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateAll'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateAll lifecycle hook - op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - }, - - - /** - * Update the given records in a single batch. Called by `Mapper#updateMany`. - * - * @name Adapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Object[]} records The records to update. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var self = this; - records || (records = []); - opts || (opts = {}); - var op = void 0; - var idAttribute = mapper.idAttribute; - - records = records.filter(function (record) { - return jsData.utils.get(record, idAttribute); - }); - - // beforeUpdateMany lifecycle hook - op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { - // Allow for re-assignment from lifecycle hook - records = jsData.utils.isUndefined(_records) ? records : _records; - records = records.map(function (record) { - return withoutRelations(mapper, record); - }); - op = opts.op = 'updateMany'; - self.dbg(op, mapper, records, opts); - return jsData.utils.resolve(self._updateMany(mapper, records, opts)); - }).then(function (results) { - var _results11 = babelHelpers.slicedToArray(results, 2); - - var data = _results11[0]; - var result = _results11[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateMany'); - response.updated = data.length; - response = self.respond(response, opts); - - // afterUpdateMany lifecycle hook - op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; - }); - }); - } - }); - - exports.noop = noop; - exports.noop2 = noop2; - exports.unique = unique; - exports.withoutRelations = withoutRelations; - exports.Adapter = Adapter; - exports.reserved = reserved; - exports.Response = Response; - - })); - //# sourceMappingURL=js-data-adapter.js.map - -/***/ }, -/* 3 */ -/***/ function(module, exports) { - - module.exports = __WEBPACK_EXTERNAL_MODULE_3__; - -/***/ } -/******/ ]) -}); -; + +/** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter + * var adapter = new HttpAdapter() + * + * @example ES2015 Modules + * import {HttpAdapter} from 'js-data-Http' + * const adapter = new HttpAdapter() + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter + * var adapter = new HttpAdapter() + * + * // ... + * }) + * + * @module js-data-http + */ + +exports.HttpAdapter = HttpAdapter; +exports.addAction = addAction; +exports.addActions = addActions; +exports.version = version; //# sourceMappingURL=js-data-http-node.js.map \ No newline at end of file diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index cf2f9d7..d5569ff 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 868649eaf68a9c6dd1fd","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///./~/js-data-adapter/dist/js-data-adapter.js","webpack:///external \"axios\""],"names":[],"mappings":"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;;;;;;AA8BA,SAAQ,OAAR,GAAkB,WAAlB,C;;;;;;AC7wCA,gD;;;;;;ACAA;AACA;AACA;AACA,kDAAiD;AACjD,EAAC,kCAAkC;;AAEnC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,+BAA+B;AAChF;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA,oEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,cAAa,OAAO;AACpB;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,6BAA6B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,8BAA8B,eAAe;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,mBAAmB,0BAA0B,eAAe;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,+BAA+B,eAAe;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,gCAAgC,eAAe;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,oBAAoB,eAAe;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,gBAAgB,iCAAiC,eAAe;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB,gBAAe,kBAAkB,kCAAkC,eAAe;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,mBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE,eAAe;AACvF;AACA;;AAEA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP,+CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,gBAAe,SAAS;AACxB,iBAAgB;AAChB;AACA;AACA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP,gDAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,iBAAgB,EAAE;AAClB;AACA;AACA,yBAAwB;AACxB;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,oDAAmD;AACnD;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,gBAAe;AACf;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gDAA+C;AAC/C;AACA,YAAW;AACX,UAAS;AACT;AACA,UAAS;AACT,QAAO;AACP;AACA,gDAA+C;AAC/C;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX,UAAS;AACT;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,KAAK;AACpB;AACA;AACA,6FAA4F,eAAe;AAC3G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,gBAAgB;AAC/B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,aAAa;AAC5B,gBAAe,aAAa;AAC5B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA,2BAA0B;AAC1B,2BAA0B;AAC1B,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB,gBAAe,OAAO;AACtB,gBAAe,QAAQ;AACvB;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD,4C;;;;;;AC/mDA,gD","file":"./node/dist/js-data-http-node.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"js-data\"), require(\"axios\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"js-data\", \"axios\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"js-data\"), require(\"axios\")) : factory(root[\"js-data\"], root[\"axios\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 868649eaf68a9c6dd1fd\n **/","/* global fetch:true Headers:true Request:true */\n\nconst axios = require('axios')\nimport {utils} from 'js-data'\nimport {\n Adapter,\n noop,\n noop2\n} from 'js-data-adapter'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nfunction HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\nexports.HttpAdapter = HttpAdapter\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addAction = function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexports.addActions = function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n exports.addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexports.version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\nexports.default = HttpAdapter\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"js-data\"\n ** module id = 1\n ** module chunks = 0\n **/","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) :\n typeof define === 'function' && define.amd ? define('js-data-adapter', ['exports', 'js-data'], factory) :\n (factory((global.Adapter = global.Adapter || {}),global.JSData));\n}(this, function (exports,jsData) { 'use strict';\n\n var babelHelpers = {};\n babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n babelHelpers.defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n babelHelpers.slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n }();\n\n babelHelpers;\n\n var noop = function noop() {\n var self = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = args[args.length - 1];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var noop2 = function noop2() {\n var self = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var opts = args[args.length - 2];\n self.dbg.apply(self, [opts.op].concat(args));\n return jsData.utils.resolve();\n };\n\n var unique = function unique(array) {\n var seen = {};\n var final = [];\n array.forEach(function (item) {\n if (item in seen) {\n return;\n }\n final.push(item);\n seen[item] = 0;\n });\n return final;\n };\n\n var withoutRelations = function withoutRelations(mapper, props) {\n return jsData.utils.omit(props, mapper.relationFields || []);\n };\n\n var DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n };\n\n /**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\n function Adapter(opts) {\n var self = this;\n opts || (opts = {});\n jsData.utils.fillIn(opts, DEFAULTS);\n jsData.utils.fillIn(self, opts);\n }\n\n var reserved = ['orderBy', 'sort', 'limit', 'offset', 'skip', 'where'];\n\n /**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\n function Response(data, meta, op) {\n var self = this;\n meta || (meta = {});\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data;\n\n jsData.utils.fillIn(self, meta);\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op;\n }\n\n /**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\n Adapter.extend = jsData.utils.extend;\n\n jsData.utils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg: function dbg() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this.log.apply(this, ['debug'].concat(args));\n },\n\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count: function count(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._count(mapper, query, opts));\n }).then(function (results) {\n var _results = babelHelpers.slicedToArray(results, 2);\n\n var data = _results[0];\n var result = _results[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create: function create(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'create';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._create(mapper, props, opts));\n }).then(function (results) {\n var _results2 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results2[0];\n var result = _results2[1];\n\n result || (result = {});\n var response = new Response(data, result, 'create');\n response.created = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany: function createMany(mapper, props, opts) {\n var self = this;\n var op = void 0;\n props || (props = {});\n opts || (opts = {});\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = props.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'createMany';\n self.dbg(op, mapper, props, opts);\n return jsData.utils.resolve(self._createMany(mapper, props, opts));\n }).then(function (results) {\n var _results3 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results3[0];\n var result = _results3[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'createMany');\n response.created = data.length;\n response = self.respond(response, opts);\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany';\n return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy: function destroy(mapper, id, opts) {\n var self = this;\n var op = void 0;\n opts || (opts = {});\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._destroy(mapper, id, opts));\n }).then(function (results) {\n var _results4 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results4[0];\n var result = _results4[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroy');\n response = self.respond(response, opts);\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll: function destroyAll(mapper, query, opts) {\n var self = this;\n var op = void 0;\n query || (query = {});\n opts || (opts = {});\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._destroyAll(mapper, query, opts));\n }).then(function (results) {\n var _results5 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results5[0];\n var result = _results5[1];\n\n result || (result = {});\n var response = new Response(data, result, 'destroyAll');\n response = self.respond(response, opts);\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) {\n var self = this;\n var relationDef = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n var _ret = function () {\n var record = records;\n return {\n v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem);\n })\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === \"object\") return _ret.v;\n } else {\n var keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record);\n }).filter(function (key) {\n return key;\n });\n return self.findAll(relationDef, {\n where: babelHelpers.defineProperty({}, relationDef.idAttribute, {\n 'in': keys\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem);\n }\n });\n });\n });\n }\n },\n\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find: function find(mapper, id, opts) {\n var self = this;\n var record = void 0,\n op = void 0;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind';\n return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find';\n self.dbg(op, mapper, id, opts);\n return jsData.utils.resolve(self._find(mapper, id, opts));\n }).then(function (results) {\n var _results6 = babelHelpers.slicedToArray(results, 1);\n\n var _record = _results6[0];\n\n if (!_record) {\n return;\n }\n record = _record;\n var tasks = [];\n\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts);\n } else {\n task = self.loadHasMany(mapper, def, record, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(record, {}, 'find');\n response.found = record ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind';\n return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll: function findAll(mapper, query, opts) {\n var self = this;\n opts || (opts = {});\n opts.with || (opts.with = []);\n\n var records = [];\n var op = void 0;\n var activeWith = opts._activeWith;\n\n if (jsData.utils.isObject(activeWith)) {\n var activeQuery = activeWith.query || {};\n if (activeWith.replace) {\n query = activeQuery;\n } else {\n jsData.utils.deepFillIn(query, activeQuery);\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll';\n self.dbg(op, mapper, query, opts);\n return jsData.utils.resolve(self._findAll(mapper, query, opts));\n }).then(function (results) {\n var _results7 = babelHelpers.slicedToArray(results, 1);\n\n var _records = _results7[0];\n\n _records || (_records = []);\n records = _records;\n var tasks = [];\n jsData.utils.forEachRelation(mapper, opts, function (def, __opts) {\n var task = void 0;\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts);\n } else {\n task = self.loadHasOne(mapper, def, records, __opts);\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts);\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts);\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts);\n }\n if (task) {\n tasks.push(task);\n }\n });\n return Promise.all(tasks);\n }).then(function () {\n var response = new Response(records, {}, 'findAll');\n response.found = records.length;\n response = self.respond(response, opts);\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll';\n return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt: function getOpt(opt, opts) {\n opts || (opts = {});\n return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]);\n },\n\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany: function loadHasMany(mapper, def, records, __opts) {\n var self = this;\n var singular = false;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n singular = true;\n records = [records];\n }\n var IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record);\n });\n var query = {\n where: {}\n };\n var criteria = query.where[def.foreignKey] = {};\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0];\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id;\n });\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n var attached = [];\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems;\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem);\n }\n });\n }\n def.setLocalField(record, attached);\n });\n });\n },\n loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) {\n var self = this;\n var record = void 0;\n var relatedMapper = def.getRelation();\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n var _ret2 = function () {\n var localKeys = [];\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record));\n });\n return {\n v: self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, {\n 'in': unique(localKeys).filter(function (x) {\n return x;\n })\n })\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n var attached = [];\n var itemKeys = jsData.utils.get(item, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem);\n }\n });\n def.setLocalField(item, attached);\n });\n return relatedItems;\n })\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === \"object\") return _ret2.v;\n }\n },\n loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) {\n var self = this;\n var relatedMapper = def.getRelation();\n var idAttribute = mapper.idAttribute;\n var record = void 0;\n\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n record = records;\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n })\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems);\n });\n } else {\n return self.findAll(relatedMapper, {\n where: babelHelpers.defineProperty({}, def.foreignKeys, {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record);\n })\n })\n }, __opts).then(function (relatedItems) {\n var foreignKeysField = def.foreignKeys;\n records.forEach(function (record) {\n var _relatedItems = [];\n var id = jsData.utils.get(record, idAttribute);\n relatedItems.forEach(function (relatedItem) {\n var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || [];\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem);\n }\n });\n def.setLocalField(record, _relatedItems);\n });\n });\n }\n },\n\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne: function loadHasOne(mapper, def, records, __opts) {\n if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) {\n records = [records];\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n var relatedData = def.getLocalField(record);\n if (jsData.utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0]);\n }\n });\n });\n },\n\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log: function log(level) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (level && !args.length) {\n args.push(level);\n level = 'debug';\n }\n if (level === 'debug' && !this.debug) {\n return;\n }\n var prefix = level.toUpperCase() + ': (Adapter)';\n if (console[level]) {\n var _console;\n\n (_console = console)[level].apply(_console, [prefix].concat(args));\n } else {\n var _console2;\n\n (_console2 = console).log.apply(_console2, [prefix].concat(args));\n }\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) {\n var localKeys = [];\n var itemKeys = jsData.utils.get(record, def.localKeys) || [];\n itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys);\n localKeys = localKeys.concat(itemKeys);\n return unique(localKeys).filter(function (x) {\n return x;\n });\n },\n\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) {\n return jsData.utils.get(record, mapper.idAttribute);\n },\n\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) {\n return def.getForeignKey(record);\n },\n\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum: function sum(mapper, field, query, opts) {\n var self = this;\n var op = void 0;\n if (!jsData.utils.isString(field)) {\n throw new Error('field must be a string!');\n }\n query || (query = {});\n opts || (opts = {});\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum';\n self.dbg(op, mapper, field, query, opts);\n return jsData.utils.resolve(self._sum(mapper, field, query, opts));\n }).then(function (results) {\n var _results8 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results8[0];\n var result = _results8[1];\n\n result || (result = {});\n var response = new Response(data, result, op);\n response = self.respond(response, opts);\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum';\n return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond: function respond(response, opts) {\n return this.getOpt('raw', opts) ? response : response.data;\n },\n\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update: function update(mapper, id, props, opts) {\n var self = this;\n props || (props = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'update';\n self.dbg(op, mapper, id, props, opts);\n return jsData.utils.resolve(self._update(mapper, id, props, opts));\n }).then(function (results) {\n var _results9 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results9[0];\n var result = _results9[1];\n\n result || (result = {});\n var response = new Response(data, result, 'update');\n response.updated = data ? 1 : 0;\n response = self.respond(response, opts);\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate';\n return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll: function updateAll(mapper, props, query, opts) {\n var self = this;\n props || (props = {});\n query || (query = {});\n opts || (opts = {});\n var op = void 0;\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = jsData.utils.isUndefined(_props) ? props : _props;\n props = withoutRelations(mapper, props);\n op = opts.op = 'updateAll';\n self.dbg(op, mapper, props, query, opts);\n return jsData.utils.resolve(self._updateAll(mapper, props, query, opts));\n }).then(function (results) {\n var _results10 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results10[0];\n var result = _results10[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateAll');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll';\n return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n },\n\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany: function updateMany(mapper, records, opts) {\n var self = this;\n records || (records = []);\n opts || (opts = {});\n var op = void 0;\n var idAttribute = mapper.idAttribute;\n\n records = records.filter(function (record) {\n return jsData.utils.get(record, idAttribute);\n });\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = jsData.utils.isUndefined(_records) ? records : _records;\n records = records.map(function (record) {\n return withoutRelations(mapper, record);\n });\n op = opts.op = 'updateMany';\n self.dbg(op, mapper, records, opts);\n return jsData.utils.resolve(self._updateMany(mapper, records, opts));\n }).then(function (results) {\n var _results11 = babelHelpers.slicedToArray(results, 2);\n\n var data = _results11[0];\n var result = _results11[1];\n\n data || (data = []);\n result || (result = {});\n var response = new Response(data, result, 'updateMany');\n response.updated = data.length;\n response = self.respond(response, opts);\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany';\n return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return jsData.utils.isUndefined(_response) ? response : _response;\n });\n });\n }\n });\n\n exports.noop = noop;\n exports.noop2 = noop2;\n exports.unique = unique;\n exports.withoutRelations = withoutRelations;\n exports.Adapter = Adapter;\n exports.reserved = reserved;\n exports.Response = Response;\n\n}));\n//# sourceMappingURL=js-data-adapter.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/js-data-adapter/dist/js-data-adapter.js\n ** module id = 2\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 3\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js-data-http-node.js","sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file From 96cda709158648ca8039121e44dd5dbb5520c4bf Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 25 May 2016 21:02:11 -0700 Subject: [PATCH 05/10] 3.0.0-beta.7 --- dist/js-data-http.js | 26 ++++++++++++++++---------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +++--- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 26 ++++++++++++++++---------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 ++-- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 4 ++-- 9 files changed, 43 insertions(+), 31 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index c7e86f6..e3f16e4 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-beta.6 - Homepage +* @version 3.0.0-beta.7 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -1348,8 +1348,14 @@ return final; }; - var withoutRelations = function withoutRelations(mapper, props) { - return jsData.utils.omit(props, mapper.relationFields || []); + var withoutRelations = function withoutRelations(mapper, props, opts) { + opts || (opts = {}); + opts.with || (opts.with = []); + var relationFields = mapper.relationFields || []; + var toStrip = relationFields.filter(function (value) { + return opts.with.indexOf(value) === -1; + }); + return jsData.utils.omit(props, toStrip); }; var DEFAULTS$1 = { @@ -1988,7 +1994,7 @@ return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'create'; self.dbg(op, mapper, props, opts); return jsData.utils.resolve(self._create(mapper, props, opts)); @@ -2037,7 +2043,7 @@ // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; props = props.map(function (record) { - return withoutRelations(mapper, record); + return withoutRelations(mapper, record, opts); }); op = opts.op = 'createMany'; self.dbg(op, mapper, props, opts); @@ -2740,7 +2746,7 @@ return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'update'; self.dbg(op, mapper, id, props, opts); return jsData.utils.resolve(self._update(mapper, id, props, opts)); @@ -2797,7 +2803,7 @@ return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'updateAll'; self.dbg(op, mapper, props, query, opts); return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); @@ -2852,7 +2858,7 @@ // Allow for re-assignment from lifecycle hook records = jsData.utils.isUndefined(_records) ? records : _records; records = records.map(function (record) { - return withoutRelations(mapper, record); + return withoutRelations(mapper, record, opts); }); op = opts.op = 'updateMany'; self.dbg(op, mapper, records, opts); @@ -4118,8 +4124,8 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 6, - full: '3.0.0-beta.6', + beta: 7, + full: '3.0.0-beta.7', major: 3, minor: 0, patch: 0 diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 111e79d..0d1087a 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-http.js","sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.11.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(4);\n\tvar InterceptorManager = __webpack_require__(13);\n\tvar isAbsoluteURL = __webpack_require__(14);\n\tvar combineURLs = __webpack_require__(15);\n\tvar bind = __webpack_require__(16);\n\tvar transformData = __webpack_require__(8);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\tmodule.exports.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(17);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n\t // Set application/json if no Content-Type has been specified\n\t if (!utils.isUndefined(headers)) {\n\t utils.forEach(headers, function processContentTypeHeader(val, key) {\n\t if (key.toLowerCase() === 'content-type') {\n\t headers['Content-Type'] = val;\n\t }\n\t });\n\t\n\t if (utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = 'application/json;charset=utf-8';\n\t }\n\t }\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(5);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(5);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(6);\n\tvar parseHeaders = __webpack_require__(7);\n\tvar transformData = __webpack_require__(8);\n\tvar isURLSameOrigin = __webpack_require__(9);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10);\n\tvar settle = __webpack_require__(11);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(12);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\t\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props) {\n return utils.omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["this","utils","DEFAULTS","axios"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-http.js","sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.11.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(4);\n\tvar InterceptorManager = __webpack_require__(13);\n\tvar isAbsoluteURL = __webpack_require__(14);\n\tvar combineURLs = __webpack_require__(15);\n\tvar bind = __webpack_require__(16);\n\tvar transformData = __webpack_require__(8);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\tmodule.exports.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(17);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n\t // Set application/json if no Content-Type has been specified\n\t if (!utils.isUndefined(headers)) {\n\t utils.forEach(headers, function processContentTypeHeader(val, key) {\n\t if (key.toLowerCase() === 'content-type') {\n\t headers['Content-Type'] = val;\n\t }\n\t });\n\t\n\t if (utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = 'application/json;charset=utf-8';\n\t }\n\t }\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(5);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(5);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(6);\n\tvar parseHeaders = __webpack_require__(7);\n\tvar transformData = __webpack_require__(8);\n\tvar isURLSameOrigin = __webpack_require__(9);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10);\n\tvar settle = __webpack_require__(11);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(12);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\t\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter(function (value) {\n return opts.with.indexOf(value) === -1\n })\n return utils.omit(props, toStrip)\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["this","utils","DEFAULTS","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 239bc5b..d9c7213 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.6 - Homepage +* @version 3.0.0-beta.7 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e,t){return t={exports:{}},e(t,t.exports,p),t.exports}function r(e){var n=this;e||(e={}),t.utils.fillIn(e,A),t.utils.fillIn(n,e)}function i(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function o(e){return null!=e&&""!==e}function a(e,t){return t||(t=""),e.filter(o).join(t)}function u(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=a(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function s(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function f(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(s(n)+"="+s(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var n=this;e||(e={}),t.utils.fillIn(e,E),r.call(n,e)}function c(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":h.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var a=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var f=[i.basePath||o.basePath||a.basePath,a.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&f.push(r),f.push(n.pathname||e),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){c(t,e)(n)}),n}}var p="undefined"!=typeof window?window:"undefined"!=typeof global?global:this,h={};h.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},h.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},h.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var y=n(function(e,t,n){!function(n,r){"object"==typeof t&&"object"==typeof e?e.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof t?t.axios=r():n.axios=r()}(p,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){function r(e){this.defaults=o.merge({},e),this.interceptors={request:new u,response:new u}}var i=n(2),o=n(3),a=n(4),u=n(13),s=n(14),f=n(15),l=n(16),c=n(8);r.prototype.request=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge(i,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(i),p=e.exports=l(r.prototype.request,d);e.exports.Axios=r,p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(17),o.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){var r=n(3),i=/^\)\]\}',?\n/,o={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(i,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(o),post:r.merge(o),put:r.merge(o)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function o(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function a(e){return"string"==typeof e}function u(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,i=e.length;i>r;r++)t.call(null,e[r],r,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(null,e[o],o,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:i,isArrayBufferView:o,isString:a,isNumber:u,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){e.exports=function(e){return new Promise(function(t,r){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(5):"undefined"!=typeof process&&(i=n(5)),"function"==typeof i&&i(t,r,e)}catch(e){r(e)}})}},function(e,t,n){var r=n(3),i=n(6),o=n(7),a=n(8),u=n(9),s="undefined"!=typeof window&&window.btoa||n(10),f=n(11);e.exports=function(e,t,l){var c=l.data,d=l.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(l.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),l.auth){var v=l.auth.username||"",m=l.auth.password||"";d.Authorization="Basic "+s(v+":"+m)}if(p.open(l.method.toUpperCase(),i(l.url,l.params,l.paramsSerializer),!0),p.timeout=l.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?o(p.getAllResponseHeaders()):null,r=l.responseType&&"text"!==l.responseType?p.response:p.responseText,i={data:a(r,n,l.transformResponse),status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:l,request:p};f(e,t,i),p=null}},p.onerror=function(){t(new Error("Network Error")),p=null},p.ontimeout=function(){var e=new Error("timeout of "+l.timeout+"ms exceeded");e.timeout=l.timeout,e.code="ECONNABORTED",t(e),p=null},r.isStandardBrowserEnv()){var g=n(12),b=l.withCredentials||u(l.url)?g.read(l.xsrfCookieName):void 0;b&&(d[l.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(e,t){"undefined"==typeof c&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),l.withCredentials&&(p.withCredentials=!0),l.responseType)try{p.responseType=l.responseType}catch(e){if("json"!==p.responseType)throw e}l.progress&&("post"===l.method||"put"===l.method?p.upload.addEventListener("progress",l.progress):"get"===l.method&&p.addEventListener("progress",l.progress)),void 0===c&&(c=null),p.send(c)}},function(e,t,n){function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(3);e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else{var a=[];i.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(i.isArray(e)&&(t+="[]"),i.isArray(e)||(e=[e]),i.forEach(e,function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))}))}),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){var r=n(3);e.exports=function(e){var t,n,i,o={};return e?(r.forEach(e.split("\n"),function(e){i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t&&(o[t]=o[t]?o[t]+", "+n:n)}),o):o}},function(e,t,n){var r=n(3);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(i.setAttribute("href",t),t=i.href),i.setAttribute("href",t),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return t=e(window.location.href),function(n){var i=r.isString(n)?e(n):n;return i.protocol===t.protocol&&i.host===t.host}}():function(){return function(){return!0}}()},function(e,t){function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,o=String(e),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&t>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,i,o,a){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;ri;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},g=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},b=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},w=function(e,n){return t.utils.omit(n,e.relationFields||[])},A={debug:!1,raw:!1};r.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(r.prototype,{afterCount:g,afterCreate:g,afterCreateMany:g,afterDestroy:g,afterDestroyAll:g,afterFind:g,afterFindAll:g,afterSum:g,afterUpdate:g,afterUpdateAll:g,afterUpdateMany:g,beforeCount:m,beforeCreate:m,beforeCreateMany:m,beforeDestroy:m,beforeDestroyAll:m,beforeFind:m,beforeFindAll:m,beforeSum:m,beforeUpdate:m,beforeUpdateAll:m,beforeUpdateMany:m,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCount",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="count",o.dbg(a,e,n,r),t.utils.resolve(o._count(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,a);return c=o.respond(c,r),a=r.op="afterCount",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreate",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n),a=r.op="create",o.dbg(a,e,n,r),t.utils.resolve(o._create(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"create");return c.created=f?1:0,c=o.respond(c,r),a=r.op="afterCreate",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t)}),a=r.op="createMany",o.dbg(a,e,n,r),t.utils.resolve(o._createMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"createMany");return c.created=f.length,c=o.respond(c,r),a=r.op="afterCreateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,r){var o=this,a=void 0;return r||(r={}),a=r.op="beforeDestroy",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroy",o.dbg(a,e,n,r),t.utils.resolve(o._destroy(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroy");return c=o.respond(c,r),a=r.op="afterDestroy",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroyAll",o.dbg(a,e,n,r),t.utils.resolve(o._destroyAll(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroyAll");return c=o.respond(c,r),a=r.op="afterDestroyAll",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:h.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},find:function(e,n,r){var o=this,a=void 0,u=void 0;return r||(r={}),r.with||(r.with=[]),u=r.op="beforeFind",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="find",o.dbg(u,e,n,r),t.utils.resolve(o._find(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new i(a,{},"find");return s.found=a?1:0,s=o.respond(s,r),u=r.op="afterFind",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,r){var o=this;r||(r={}),r.with||(r.with=[]);var a=[],u=void 0,s=r._activeWith;if(t.utils.isObject(s)){var f=s.query||{};s.replace?n=f:t.utils.deepFillIn(n,f)}return u=r.op="beforeFindAll",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="findAll",o.dbg(u,e,n,r),t.utils.resolve(o._findAll(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new i(a,{},"findAll");return s.found=a.length,s=o.respond(s,r),u=r.op="afterFindAll",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return a?f["=="]=u[0]:f.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:b(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:h.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:h.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),b(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,r,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return r||(r={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,r,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,r,o),t.utils.resolve(a._sum(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,u);return d=a.respond(d,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,r,o){var a=this;r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return r=t.utils.isUndefined(i)?r:i,r=w(e,r),u=o.op="update",a.dbg(u,e,n,r,o),t.utils.resolve(a._update(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,"update");return d.updated=l?1:0,d=a.respond(d,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateAll:function(e,n,r,o){var a=this;n||(n={}),r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n),u=o.op="updateAll",a.dbg(u,e,n,r,o),t.utils.resolve(a._updateAll(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new i(l,c,"updateAll");return d.updated=l.length,d=a.respond(d,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateMany:function(e,n,r){var o=this;n||(n=[]),r||(r={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=r.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t)}),a=r.op="updateMany",o.dbg(a,e,n,r),t.utils.resolve(o._updateMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"updateMany");return c.updated=f.length,c=o.respond(c,r),a=r.op="afterUpdateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}});var T=!1;try{T=window&&window.fetch}catch(e){}var x=r.prototype,E={basePath:"",forceTrailingSlash:!1,http:v,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(r.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:r}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:g,afterGET:g,afterHTTP:g,afterPOST:g,afterPUT:g,beforeDEL:m,beforeGET:m,beforeHTTP:m,beforePOST:m,beforePUT:m,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(f(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],a=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,f=e.getRelation(),l=r.params[s];if(l===!1||!s||!f)return l===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(l=l||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),f.idAttribute):null)),l){var c=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,f),a=u(i.getEndpoint(f,l,e),l,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":h.typeof(c)))return c.v}}}),a},getPath:function(e,n,r,i){var o=this;i||(i={});var a=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(r),u.apply(t.utils,a)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var f=e.suffix||n.suffix||i.suffix;if(f&&e.url.substr(e.url.length-f.length)!==f&&(e.url+=f),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,T&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u, -a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),x.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),x.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.updateMany.call(r,e,t,n)}});var P={beta:6,full:"3.0.0-beta.6",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=c,e.addActions=d,e.version=P}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e,t){return t={exports:{}},e(t,t.exports,p),t.exports}function r(e){var n=this;e||(e={}),t.utils.fillIn(e,A),t.utils.fillIn(n,e)}function i(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function o(e){return null!=e&&""!==e}function a(e,t){return t||(t=""),e.filter(o).join(t)}function u(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=a(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function s(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function f(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(s(n)+"="+s(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var n=this;e||(e={}),t.utils.fillIn(e,E),r.call(n,e)}function c(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":h.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var a=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var f=[i.basePath||o.basePath||a.basePath,a.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&f.push(r),f.push(n.pathname||e),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){c(t,e)(n)}),n}}var p="undefined"!=typeof window?window:"undefined"!=typeof global?global:this,h={};h.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},h.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},h.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var y=n(function(e,t,n){!function(n,r){"object"==typeof t&&"object"==typeof e?e.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof t?t.axios=r():n.axios=r()}(p,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){function r(e){this.defaults=o.merge({},e),this.interceptors={request:new u,response:new u}}var i=n(2),o=n(3),a=n(4),u=n(13),s=n(14),f=n(15),l=n(16),c=n(8);r.prototype.request=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge(i,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(i),p=e.exports=l(r.prototype.request,d);e.exports.Axios=r,p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(17),o.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){var r=n(3),i=/^\)\]\}',?\n/,o={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(i,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(o),post:r.merge(o),put:r.merge(o)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function o(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function a(e){return"string"==typeof e}function u(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,i=e.length;i>r;r++)t.call(null,e[r],r,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(null,e[o],o,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:i,isArrayBufferView:o,isString:a,isNumber:u,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){e.exports=function(e){return new Promise(function(t,r){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(5):"undefined"!=typeof process&&(i=n(5)),"function"==typeof i&&i(t,r,e)}catch(e){r(e)}})}},function(e,t,n){var r=n(3),i=n(6),o=n(7),a=n(8),u=n(9),s="undefined"!=typeof window&&window.btoa||n(10),f=n(11);e.exports=function(e,t,l){var c=l.data,d=l.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(l.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),l.auth){var v=l.auth.username||"",m=l.auth.password||"";d.Authorization="Basic "+s(v+":"+m)}if(p.open(l.method.toUpperCase(),i(l.url,l.params,l.paramsSerializer),!0),p.timeout=l.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?o(p.getAllResponseHeaders()):null,r=l.responseType&&"text"!==l.responseType?p.response:p.responseText,i={data:a(r,n,l.transformResponse),status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:l,request:p};f(e,t,i),p=null}},p.onerror=function(){t(new Error("Network Error")),p=null},p.ontimeout=function(){var e=new Error("timeout of "+l.timeout+"ms exceeded");e.timeout=l.timeout,e.code="ECONNABORTED",t(e),p=null},r.isStandardBrowserEnv()){var g=n(12),b=l.withCredentials||u(l.url)?g.read(l.xsrfCookieName):void 0;b&&(d[l.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(e,t){"undefined"==typeof c&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),l.withCredentials&&(p.withCredentials=!0),l.responseType)try{p.responseType=l.responseType}catch(e){if("json"!==p.responseType)throw e}l.progress&&("post"===l.method||"put"===l.method?p.upload.addEventListener("progress",l.progress):"get"===l.method&&p.addEventListener("progress",l.progress)),void 0===c&&(c=null),p.send(c)}},function(e,t,n){function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(3);e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else{var a=[];i.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(i.isArray(e)&&(t+="[]"),i.isArray(e)||(e=[e]),i.forEach(e,function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))}))}),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){var r=n(3);e.exports=function(e){var t,n,i,o={};return e?(r.forEach(e.split("\n"),function(e){i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t&&(o[t]=o[t]?o[t]+", "+n:n)}),o):o}},function(e,t,n){var r=n(3);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(i.setAttribute("href",t),t=i.href),i.setAttribute("href",t),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return t=e(window.location.href),function(n){var i=r.isString(n)?e(n):n;return i.protocol===t.protocol&&i.host===t.host}}():function(){return function(){return!0}}()},function(e,t){function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,o=String(e),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&t>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,i,o,a){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;ri;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},g=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},b=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},w=function(e,n,r){r||(r={}),r.with||(r.with=[]);var i=e.relationFields||[],o=i.filter(function(e){return-1===r.with.indexOf(e)});return t.utils.omit(n,o)},A={debug:!1,raw:!1};r.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(r.prototype,{afterCount:g,afterCreate:g,afterCreateMany:g,afterDestroy:g,afterDestroyAll:g,afterFind:g,afterFindAll:g,afterSum:g,afterUpdate:g,afterUpdateAll:g,afterUpdateMany:g,beforeCount:m,beforeCreate:m,beforeCreateMany:m,beforeDestroy:m,beforeDestroyAll:m,beforeFind:m,beforeFindAll:m,beforeSum:m,beforeUpdate:m,beforeUpdateAll:m,beforeUpdateMany:m,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCount",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="count",o.dbg(a,e,n,r),t.utils.resolve(o._count(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,a);return c=o.respond(c,r),a=r.op="afterCount",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreate",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n,r),a=r.op="create",o.dbg(a,e,n,r),t.utils.resolve(o._create(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"create");return c.created=f?1:0,c=o.respond(c,r),a=r.op="afterCreate",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t,r)}),a=r.op="createMany",o.dbg(a,e,n,r),t.utils.resolve(o._createMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"createMany");return c.created=f.length,c=o.respond(c,r),a=r.op="afterCreateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,r){var o=this,a=void 0;return r||(r={}),a=r.op="beforeDestroy",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroy",o.dbg(a,e,n,r),t.utils.resolve(o._destroy(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroy");return c=o.respond(c,r),a=r.op="afterDestroy",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroyAll",o.dbg(a,e,n,r),t.utils.resolve(o._destroyAll(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroyAll");return c=o.respond(c,r),a=r.op="afterDestroyAll",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:h.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},find:function(e,n,r){var o=this,a=void 0,u=void 0;return r||(r={}),r.with||(r.with=[]),u=r.op="beforeFind",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="find",o.dbg(u,e,n,r),t.utils.resolve(o._find(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new i(a,{},"find");return s.found=a?1:0,s=o.respond(s,r),u=r.op="afterFind",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,r){var o=this;r||(r={}),r.with||(r.with=[]);var a=[],u=void 0,s=r._activeWith;if(t.utils.isObject(s)){var f=s.query||{};s.replace?n=f:t.utils.deepFillIn(n,f)}return u=r.op="beforeFindAll",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="findAll",o.dbg(u,e,n,r),t.utils.resolve(o._findAll(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new i(a,{},"findAll");return s.found=a.length,s=o.respond(s,r),u=r.op="afterFindAll",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return a?f["=="]=u[0]:f.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:b(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:h.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:h.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),b(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,r,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return r||(r={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,r,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,r,o),t.utils.resolve(a._sum(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,u);return d=a.respond(d,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,r,o){var a=this;r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return r=t.utils.isUndefined(i)?r:i,r=w(e,r,o),u=o.op="update",a.dbg(u,e,n,r,o),t.utils.resolve(a._update(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,"update");return d.updated=l?1:0,d=a.respond(d,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateAll:function(e,n,r,o){var a=this;n||(n={}),r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n,o),u=o.op="updateAll",a.dbg(u,e,n,r,o),t.utils.resolve(a._updateAll(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new i(l,c,"updateAll");return d.updated=l.length,d=a.respond(d,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateMany:function(e,n,r){var o=this;n||(n=[]),r||(r={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=r.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t,r)}),a=r.op="updateMany",o.dbg(a,e,n,r),t.utils.resolve(o._updateMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"updateMany");return c.updated=f.length,c=o.respond(c,r),a=r.op="afterUpdateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}});var T=!1;try{T=window&&window.fetch}catch(e){}var x=r.prototype,E={basePath:"",forceTrailingSlash:!1,http:v,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(r.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:r}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:g,afterGET:g,afterHTTP:g,afterPOST:g,afterPUT:g,beforeDEL:m,beforeGET:m,beforeHTTP:m,beforePOST:m,beforePUT:m,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(f(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],a=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,f=e.getRelation(),l=r.params[s];if(l===!1||!s||!f)return l===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(l=l||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),f.idAttribute):null)),l){var c=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,f),a=u(i.getEndpoint(f,l,e),l,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":h.typeof(c)))return c.v}}}),a},getPath:function(e,n,r,i){var o=this;i||(i={});var a=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(r),u.apply(t.utils,a)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var f=e.suffix||n.suffix||i.suffix;if(f&&e.url.substr(e.url.length-f.length)!==f&&(e.url+=f),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,T&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put", +a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),x.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),x.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.updateMany.call(r,e,t,n)}});var P={beta:7,full:"3.0.0-beta.7",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=c,e.addActions=d,e.version=P}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index 8e90b07..69c263b 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","__commonjs","fn","__commonjs_global","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isArrayBufferView","buffer","isFile","isBlob","isUndefined","toLowerCase","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","trim","str","isStandardBrowserEnv","document","createElement","l","assignValue","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","axios$1","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","omit","relationFields","debug","raw","extend","addHiddenPropsToTarget","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","_props","_create","_results2","created","createMany","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","with","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","hasFetch","fetch","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","logResponse","start","toUTCString","getTime","payload","cache","catch","version","beta","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","__commonjs","fn","__commonjs_global","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isArrayBufferView","buffer","isFile","isBlob","isUndefined","toLowerCase","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","trim","str","isStandardBrowserEnv","document","createElement","l","assignValue","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","axios$1","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","addHiddenPropsToTarget","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","_props","_create","_results2","created","createMany","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","hasFetch","fetch","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","logResponse","start","toUTCString","getTime","payload","cache","catch","version","beta","full","major","minor"],"mappings":"CAAC,SAAUA,EAAQC,GACC,gBAAZC,UAA0C,mBAAXC,QAAyBF,EAAQC,QAASE,QAAQ,YACtE,kBAAXC,SAAyBA,OAAOC,IAAMD,OAAO,gBAAiB,UAAW,WAAYJ,GAC3FA,EAASD,EAAOO,WAAaP,EAAOO,eAAkBP,EAAOQ,SAC7DC,KAAM,SAAUP,EAAQQ,GAAU,YAGnC,SAASC,GAAWC,EAAIT,GAAU,MAAOA,IAAWD,YAAeU,EAAGT,EAAQA,EAAOD,QAASW,GAAoBV,EAAOD,QA+1CzH,QAASY,GAAQC,GACf,GAAIC,GAAOP,IACXM,KAASA,MACTL,EAAOO,MAAMC,OAAOH,EAAMI,GAC1BT,EAAOO,MAAMC,OAAOF,EAAMD,GAS5B,QAASK,GAASC,EAAMC,EAAMC,GAC5B,GAAIP,GAAOP,IACXa,KAASA,MAQTN,EAAKK,KAAOA,EAEZX,EAAOO,MAAMC,OAAOF,EAAMM,GAQ1BN,EAAKO,GAAKA,EA87CZ,QAASC,GAAcC,GACrB,MAAgB,OAATA,GAA2B,KAAVA,EAE1B,QAASC,GAAKC,EAAOC,GAEnB,MADAA,KAAcA,EAAY,IACnBD,EAAME,OAAOL,GAAeE,KAAKE,GAE1C,QAASE,KACP,IAAK,GAAIC,GAAOC,UAAUC,OAAQC,EAAOC,MAAMJ,GAAOK,EAAO,EAAUL,EAAPK,EAAaA,IAC3EF,EAAKE,GAAQJ,UAAUI,EAGzB,IAAIC,GAASX,EAAKQ,EAAM,IACxB,OAAOG,GAAOC,QAAQ,oBAAqB,OAG7C,QAASC,GAAOC,GACd,MAAOC,oBAAmBD,GAAKF,QAAQ,QAAS,KAAKA,QAAQ,QAAS,KAAKA,QAAQ,OAAQ,KAAKA,QAAQ,QAAS,KAAKA,QAAQ,OAAQ,KAAKA,QAAQ,QAAS,KAAKA,QAAQ,QAAS,KAGpL,QAASI,GAASC,EAAKC,GACrB,IAAKA,EACH,MAAOD,EAGT,IAAIE,KAwBJ,OAtBAnC,GAAOO,MAAM6B,OAAOF,EAAQ,SAAUJ,EAAKO,GAC7B,OAARP,GAA+B,mBAARA,KAGtB9B,EAAOO,MAAM+B,QAAQR,KACxBA,GAAOA,IAGTA,EAAIS,QAAQ,SAAUC,GACY,kBAA5BC,OAAOC,SAASC,KAAKH,GACvBA,EAAIA,EAAEI,cACG5C,EAAOO,MAAMsC,SAASL,KAC/BA,EAAIxC,EAAOO,MAAMuC,OAAON,IAE1BL,EAAMY,KAAKlB,EAAOQ,GAAO,IAAMR,EAAOW,SAItCL,EAAMZ,OAAS,IACjBU,IAA6B,KAArBA,EAAIe,QAAQ,KAAc,IAAM,KAAOb,EAAMnB,KAAK,MAGrDiB,EA4DT,QAASgB,GAAY5C,GACnB,GAAIC,GAAOP,IACXM,KAASA,MACTL,EAAOO,MAAMC,OAAOH,EAAM6C,GAC1B9C,EAAQuC,KAAKrC,EAAMD,GAu+BrB,QAAS8C,GAAUC,EAAM/C,GACvB,IAAK+C,IAASpD,EAAOO,MAAM8C,SAASD,GAClC,KAAM,IAAIE,WAAU,mDAAqE,mBAATF,GAAuB,YAAcG,EAAaC,OAAOJ,IAE3I,OAAO,UAAUK,GACf,GAAIA,EAAOL,GACT,KAAM,IAAIM,OAAM,yBAA2BN,EAAO,6BA6CpD,OA3CA/C,GAAKsD,QAAUtD,EAAKsD,SAAW,SAAUC,GACvC,MAAOA,IAETvD,EAAKwD,SAAWxD,EAAKwD,UAAY,SAAUA,GACzC,MAAOA,IAETxD,EAAKyD,cAAgBzD,EAAKyD,eAAiB,SAAUC,GACnD,MAAO/D,GAAOO,MAAMyD,OAAOD,IAE7BN,EAAOL,GAAQ,SAAUa,EAAIC,GAC3B,GAAI5D,GAAOP,IACPC,GAAOO,MAAMsC,SAASoB,KACxBC,EAAQD,GAEVC,EAAQA,KACR,IAAIC,GAAU7D,EAAK8D,WAAW/D,EAAK8D,SAAW7D,EAAK+D,gBAAkB,QACjET,IAKJ,IAJA5D,EAAOO,MAAMC,OAAOoD,EAAQvD,IACvB6D,EAAMI,eAAe,aAAeV,EAAOW,WAC9CL,EAAMK,SAAWX,EAAOW,UAEO,kBAAtBL,GAAMM,YACfZ,EAAO3B,IAAMiC,EAAMM,YAAYlE,EAAM4D,OAChC,CACL,GAAI1C,IAAQ0C,EAAMO,UAAYnE,EAAKmE,UAAYN,EAAQM,SAAUN,EAAQK,YAAYlE,EAAMN,EAAOO,MAAMmE,OAAOT,GAAMA,EAAK,KAAMC,GAC5HlE,GAAOO,MAAMmE,OAAOT,IACtBzC,EAAKuB,KAAKkB,GAEZzC,EAAKuB,KAAK1C,EAAKsE,UAAYvB,GAC3BQ,EAAO3B,IAAMb,EAASwD,MAAM,KAAMpD,GAKpC,MAHAoC,GAAOiB,OAASjB,EAAOiB,QAAU,MACjCjB,EAAOH,OAASnD,EAAK8C,KACrBpD,EAAOO,MAAMuE,UAAUlB,EAAQM,GACxBlE,EAAOO,MAAMwE,QAAQnB,GAAQoB,KAAKd,EAAMP,SAAWtD,EAAKsD,SAASqB,KAAK,SAAUpB,GACrF,MAAOO,GAAQc,KAAKrB,KACnBoB,KAAK,SAAUrE,GAIhB,MAHIA,IAAQA,EAAKiD,SACfjD,EAAKiD,OAAOH,OAASnD,EAAK8C,MAErBzC,IACNqE,KAAKd,EAAML,UAAYxD,EAAKwD,SAAUK,EAAMJ,eAAiBzD,EAAKyD,gBAEhEL,GA6CX,QAASyB,GAAW7E,GAElB,MADAA,KAASA,MACF,SAAUoD,GAIf,MAHAzD,GAAOO,MAAM6B,OAAO/B,EAAM,SAAUU,EAAOsB,GACzCc,EAAUd,EAAKtB,GAAO0C,KAEjBA,GA7/HX,GAAItD,GAAsC,mBAAXsC,QAAyBA,OAA2B,mBAAXnD,QAAyBA,OAASS,KAItGwD,IACJA,GAAaC,OAA2B,kBAAX2B,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GACpG,aAAcA,IACZ,SAAUA,GACZ,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,OAAS,eAAkBE,IAG/F9B,EAAagC,eAAiB,SAAUF,EAAKhD,EAAKtB,GAYhD,MAXIsB,KAAOgD,GACTG,OAAOD,eAAeF,EAAKhD,GACzBtB,MAAOA,EACP0E,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZN,EAAIhD,GAAOtB,EAGNsE,GAGT9B,EAAaqC,cAAgB,WAC3B,QAASC,GAAcC,EAAKC,GAC1B,GAAIC,MACAC,GAAK,EACLC,GAAK,EACLC,EAAKC,MAET,KACE,IAAK,GAAiCC,GAA7BC,EAAKR,EAAIX,OAAOC,cAAmBa,GAAMI,EAAKC,EAAGC,QAAQC,QAChER,EAAKjD,KAAKsD,EAAGtF,QAETgF,GAAKC,EAAKzE,SAAWwE,GAH8CE,GAAK,IAK9E,MAAOlC,GACPmC,GAAK,EACLC,EAAKpC,EACL,QACA,KACOkC,GAAMK,EAAW,QAAGA,EAAW,SACpC,QACA,GAAIJ,EAAI,KAAMC,IAIlB,MAAOH,GAGT,MAAO,UAAUF,EAAKC,GACpB,GAAItE,MAAMa,QAAQwD,GAChB,MAAOA,EACF,IAAIX,OAAOC,WAAYI,QAAOM,GACnC,MAAOD,GAAcC,EAAKC,EAE1B,MAAM,IAAIzC,WAAU,2DAO1B,IAAImD,GAAQxG,EAAW,SAAUR,EAAQD,EAASF,IAElD,SAA2CoH,EAAMnH,GAC1B,gBAAZC,IAA0C,gBAAXC,GACxCA,EAAOD,QAAUD,IACQ,kBAAXI,SAAyBA,OAAOC,IAC9CD,UAAWJ,GACe,gBAAZC,GACdA,EAAe,MAAID,IAEnBmH,EAAY,MAAInH,KACfY,EAAmB,WACtB,MAAgB,UAAUwG,GAKhB,QAASC,GAAoBC,GAG5B,GAAGC,EAAiBD,GACnB,MAAOC,GAAiBD,GAAUrH,OAGnC,IAAIC,GAASqH,EAAiBD,IAC7BrH,WACAyE,GAAI4C,EACJE,QAAQ,EAUT,OANAJ,GAAQE,GAAUlE,KAAKlD,EAAOD,QAASC,EAAQA,EAAOD,QAASoH,GAG/DnH,EAAOsH,QAAS,EAGTtH,EAAOD,QAvBf,GAAIsH,KAqCJ,OATAF,GAAoBI,EAAIL,EAGxBC,EAAoBK,EAAIH,EAGxBF,EAAoBM,EAAI,GAGjBN,EAAoB,KAK/B,SAASnH,EAAQD,EAASoH,GAE/BnH,EAAOD,QAAUoH,EAAoB,IAIhC,SAASnH,EAAQD,EAASoH,GAa/B,QAASO,GAAMC,GACbrH,KAAKsH,SAAW9G,EAAM+G,SAAUF,GAChCrH,KAAKwH,cACH5D,QAAS,GAAI6D,GACb3D,SAAU,GAAI2D,IAblB,GAAIH,GAAWT,EAAoB,GAC/BrG,EAAQqG,EAAoB,GAC5Ba,EAAkBb,EAAoB,GACtCY,EAAqBZ,EAAoB,IACzCc,EAAgBd,EAAoB,IACpCe,EAAcf,EAAoB,IAClCgB,EAAOhB,EAAoB,IAC3BiB,EAAgBjB,EAAoB,EAUxCO,GAAMW,UAAUnE,QAAU,SAAiBC,GAGnB,gBAAXA,KACTA,EAASrD,EAAM+G,OACbrF,IAAKX,UAAU,IACdA,UAAU,KAGfsC,EAASrD,EAAM+G,MAAMD,EAAUtH,KAAKsH,UAAYxC,OAAQ,OAASjB,GAG7DA,EAAOmE,UAAYL,EAAc9D,EAAO3B,OAC1C2B,EAAO3B,IAAM0F,EAAY/D,EAAOmE,QAASnE,EAAO3B,MAIlD2B,EAAOoE,gBAAkBpE,EAAOoE,iBAAmBjI,KAAKsH,SAASW,gBAGjEpE,EAAOjD,KAAOkH,EACZjE,EAAOjD,KACPiD,EAAOqE,QACPrE,EAAOsE,kBAITtE,EAAOqE,QAAU1H,EAAM+G,MACrB1D,EAAOqE,QAAQE,WACfvE,EAAOqE,QAAQrE,EAAOiB,YACtBjB,EAAOqE,aAGT1H,EAAMgC,SACH,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,UAClD,SAA2BsC,SAClBjB,GAAOqE,QAAQpD,IAK1B,IAAIuD,IAASX,EAAiBrB,QAC1BiC,EAAUC,QAAQvD,QAAQnB,EAU9B,KARA7D,KAAKwH,aAAa5D,QAAQpB,QAAQ,SAAoCgG,GACpEH,EAAMI,QAAQD,EAAYE,UAAWF,EAAYG,YAGnD3I,KAAKwH,aAAa1D,SAAStB,QAAQ,SAAkCgG,GACnEH,EAAMrF,KAAKwF,EAAYE,UAAWF,EAAYG,YAGzCN,EAAM7G,QACX8G,EAAUA,EAAQrD,KAAKoD,EAAMO,QAASP,EAAMO,QAG9C,OAAON,GAGT,IAAIO,GAAkB,GAAIzB,GAAME,GAC5BZ,EAAQhH,EAAOD,QAAUoI,EAAKT,EAAMW,UAAUnE,QAASiF,EAC3DnJ,GAAOD,QAAQ2H,MAAQA,EAGvBV,EAAMY,SAAWuB,EAAgBvB,SACjCZ,EAAMc,aAAeqB,EAAgBrB,aAGrCd,EAAMoC,OAAS,SAAgBzB,GAC7B,MAAO,IAAID,GAAMC,IAInBX,EAAMqC,IAAM,SAAaC,GACvB,MAAOT,SAAQQ,IAAIC,IAErBtC,EAAMuC,OAASpC,EAAoB,IAGnCrG,EAAMgC,SAAS,SAAU,MAAO,QAAS,SAA6BsC,GAEpEsC,EAAMW,UAAUjD,GAAU,SAAS5C,EAAK2B,GACtC,MAAO7D,MAAK4D,QAAQpD,EAAM+G,MAAM1D,OAC9BiB,OAAQA,EACR5C,IAAKA,MAGTwE,EAAM5B,GAAU+C,EAAKT,EAAMW,UAAUjD,GAAS+D,KAGhDrI,EAAMgC,SAAS,OAAQ,MAAO,SAAU,SAA+BsC,GAErEsC,EAAMW,UAAUjD,GAAU,SAAS5C,EAAKtB,EAAMiD,GAC5C,MAAO7D,MAAK4D,QAAQpD,EAAM+G,MAAM1D,OAC9BiB,OAAQA,EACR5C,IAAKA,EACLtB,KAAMA,MAGV8F,EAAM5B,GAAU+C,EAAKT,EAAMW,UAAUjD,GAAS+D,MAM3C,SAASnJ,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,GAE5BqC,EAAoB,eACpBC,GACFC,eAAgB,oCAGlB1J,GAAOD,SACL0I,kBAAmB,SAA0BvH,EAAMsH,GACjD,MAAI1H,GAAM6I,WAAWzI,IAASJ,EAAM8I,cAAc1I,IAASJ,EAAM+I,SAAS3I,GACjEA,EAELJ,EAAMgJ,kBAAkB5I,GACnBA,EAAK6I,QAEVjJ,EAAMsC,SAASlC,IAAUJ,EAAMkJ,OAAO9I,IAAUJ,EAAMmJ,OAAO/I,GAe1DA,GAbAJ,EAAMoJ,YAAY1B,KACrB1H,EAAMgC,QAAQ0F,EAAS,SAAkCnG,EAAKO,GAClC,iBAAtBA,EAAIuH,gBACN3B,EAAQ,gBAAkBnG,KAI1BvB,EAAMoJ,YAAY1B,EAAQ,mBAC5BA,EAAQ,gBAAkB,mCAGvB4B,KAAKC,UAAUnJ,MAK1BoJ,mBAAoB,SAA2BpJ,GAE7C,GAAoB,gBAATA,GAAmB,CAC5BA,EAAOA,EAAKiB,QAAQqH,EAAmB,GACvC,KACEtI,EAAOkJ,KAAKG,MAAMrJ,GAClB,MAAOsJ,KAEX,MAAOtJ,KAGTsH,SACEE,QACE+B,OAAU,qCAEZC,MAAO5J,EAAM+G,MAAM4B,GACnBkB,KAAM7J,EAAM+G,MAAM4B,GAClBmB,IAAK9J,EAAM+G,MAAM4B,IAGnBoB,QAAS,EAETC,eAAgB,aAChBC,eAAgB,eAEhBC,iBAAkB,GAElBC,eAAgB,SAAwBC,GACtC,MAAOA,IAAU,KAAgB,IAATA,KAOvB,SAASlL,EAAQD,GAgBtB,QAAS8C,GAAQR,GACf,MAA8B,mBAAvBY,EAASC,KAAKb,GASvB,QAASuH,GAAcvH,GACrB,MAA8B,yBAAvBY,EAASC,KAAKb,GASvB,QAASsH,GAAWtH,GAClB,MAA4B,mBAAb8I,WAA8B9I,YAAe8I,UAS9D,QAASrB,GAAkBzH,GACzB,GAAIH,EAMJ,OAJEA,GAD0B,mBAAhBkJ,cAAiCA,YAAkB,OACpDA,YAAYC,OAAOhJ,GAEnB,GAAUA,EAAU,QAAMA,EAAI0H,iBAAkBqB,aAW7D,QAASxH,GAASvB,GAChB,MAAsB,gBAARA,GAShB,QAASiJ,GAASjJ,GAChB,MAAsB,gBAARA,GAShB,QAAS6H,GAAY7H,GACnB,MAAsB,mBAARA,GAShB,QAASe,GAASf,GAChB,MAAe,QAARA,GAA+B,gBAARA,GAShC,QAASkJ,GAAOlJ,GACd,MAA8B,kBAAvBY,EAASC,KAAKb,GASvB,QAAS2H,GAAO3H,GACd,MAA8B,kBAAvBY,EAASC,KAAKb,GASvB,QAAS4H,GAAO5H,GACd,MAA8B,kBAAvBY,EAASC,KAAKb,GASvB,QAASmJ,GAAWnJ,GAClB,MAA8B,sBAAvBY,EAASC,KAAKb,GASvB,QAASwH,GAASxH,GAChB,MAAOe,GAASf,IAAQmJ,EAAWnJ,EAAIoJ,MASzC,QAASC,GAAKC,GACZ,MAAOA,GAAIxJ,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAgBjD,QAASyJ,KACP,MACoB,mBAAX5I,SACa,mBAAb6I,WAC2B,kBAA3BA,UAASC,cAgBpB,QAAShJ,GAAQ8C,EAAKnF,GAEpB,GAAY,OAARmF,GAA+B,mBAARA,GAU3B,GALmB,gBAARA,IAAqB/C,EAAQ+C,KAEtCA,GAAOA,IAGL/C,EAAQ+C,GAEV,IAAK,GAAIU,GAAI,EAAGyF,EAAInG,EAAI9D,OAAYiK,EAAJzF,EAAOA,IACrC7F,EAAGyC,KAAK,KAAM0C,EAAIU,GAAIA,EAAGV,OAI3B,KAAK,GAAIhD,KAAOgD,GACVA,EAAIf,eAAejC,IACrBnC,EAAGyC,KAAK,KAAM0C,EAAIhD,GAAMA,EAAKgD,GAuBrC,QAASiC,KAEP,QAASmE,GAAY3J,EAAKO,GACG,gBAAhBV,GAAOU,IAAoC,gBAARP,GAC5CH,EAAOU,GAAOiF,EAAM3F,EAAOU,GAAMP,GAEjCH,EAAOU,GAAOP,EAIlB,IAAK,GATDH,MASKoE,EAAI,EAAGyF,EAAIlK,UAAUC,OAAYiK,EAAJzF,EAAOA,IAC3CxD,EAAQjB,UAAUyE,GAAI0F,EAExB,OAAO9J,GA9OT,GAAIe,GAAW8C,OAAOsC,UAAUpF,QAiPhCjD,GAAOD,SACL8C,QAASA,EACT+G,cAAeA,EACfD,WAAYA,EACZG,kBAAmBA,EACnBlG,SAAUA,EACV0H,SAAUA,EACVlI,SAAUA,EACV8G,YAAaA,EACbqB,OAAQA,EACRvB,OAAQA,EACRC,OAAQA,EACRuB,WAAYA,EACZ3B,SAAUA,EACV+B,qBAAsBA,EACtB9I,QAASA,EACT+E,MAAOA,EACP6D,KAAMA,IAMH,SAAS1L,EAAQD,EAASoH,GAW/BnH,EAAOD,QAAU,SAAyBoE,GACxC,MAAO,IAAI0E,SAAQ,SAAkBvD,EAASf,GAC5C,IACE,GAAIG,EAE0B,mBAAnBP,GAAOO,QAEhBA,EAAUP,EAAOO,QACkB,mBAAnBuH,gBAEhBvH,EAAUyC,EAAoB,GACF,mBAAZ+E,WAEhBxH,EAAUyC,EAAoB,IAGT,kBAAZzC,IACTA,EAAQY,EAASf,EAAQJ,GAE3B,MAAOqG,GACPjG,EAAOiG,QASR,SAASxK,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,GAC5BgF,EAAWhF,EAAoB,GAC/BiF,EAAejF,EAAoB,GACnCiB,EAAgBjB,EAAoB,GACpCkF,EAAkBlF,EAAoB,GACtCmF,EAA0B,mBAAXtJ,SAA0BA,OAAOsJ,MAASnF,EAAoB,IAC7EoF,EAASpF,EAAoB,GAEjCnH,GAAOD,QAAU,SAAoBuF,EAASf,EAAQJ,GACpD,GAAIqI,GAAcrI,EAAOjD,KACrBuL,EAAiBtI,EAAOqE,OAExB1H,GAAM6I,WAAW6C,UACZC,GAAe,eAGxB,IAAIvI,GAAU,GAAI+H,gBACdS,EAAY,qBACZC,GAAU,CAcd,IATmD,mBAAX3J,UAA0BA,OAAO4J,gBAAoB,mBAAqB1I,IAAamI,EAAgBlI,EAAO3B,OACpJ0B,EAAU,GAAIlB,QAAO4J,eACrBF,EAAY,SACZC,GAAU,EACVzI,EAAQ2I,WAAa,aACrB3I,EAAQ4I,UAAY,cAIlB3I,EAAO4I,KAAM,CACf,GAAIC,GAAW7I,EAAO4I,KAAKC,UAAY,GACnCC,EAAW9I,EAAO4I,KAAKE,UAAY,EACvCR,GAAeS,cAAgB,SAAWZ,EAAKU,EAAW,IAAMC,GAmElE,GAhEA/I,EAAQiJ,KAAKhJ,EAAOiB,OAAOgI,cAAejB,EAAShI,EAAO3B,IAAK2B,EAAO1B,OAAQ0B,EAAOkJ,mBAAmB,GAGxGnJ,EAAQ2G,QAAU1G,EAAO0G,QAGzB3G,EAAQwI,GAAa,WACnB,GAAKxI,IAAmC,IAAvBA,EAAQoJ,YAAqBX,IAMvB,IAAnBzI,EAAQgH,OAAZ,CAKA,GAAIqC,GAAkB,yBAA2BrJ,GAAUkI,EAAalI,EAAQsJ,yBAA2B,KACvGC,EAAgBtJ,EAAOuJ,cAAwC,SAAxBvJ,EAAOuJ,aAAiDxJ,EAAQE,SAA/BF,EAAQyJ,aAChFvJ,GACFlD,KAAMkH,EACJqF,EACAF,EACApJ,EAAOmG,mBAGTY,OAA2B,OAAnBhH,EAAQgH,OAAkB,IAAMhH,EAAQgH,OAChD0C,WAA+B,OAAnB1J,EAAQgH,OAAkB,aAAehH,EAAQ0J,WAC7DpF,QAAS+E,EACTpJ,OAAQA,EACRD,QAASA,EAGXqI,GAAOjH,EAASf,EAAQH,GAGxBF,EAAU,OAIZA,EAAQ2J,QAAU,WAGhBtJ,EAAO,GAAIN,OAAM,kBAGjBC,EAAU,MAIZA,EAAQ4I,UAAY,WAClB,GAAIxI,GAAM,GAAIL,OAAM,cAAgBE,EAAO0G,QAAU,cACrDvG,GAAIuG,QAAU1G,EAAO0G,QACrBvG,EAAIwJ,KAAO,eACXvJ,EAAOD,GAGPJ,EAAU,MAMRpD,EAAM8K,uBAAwB,CAChC,GAAImC,GAAU5G,EAAoB,IAG9B6G,EAAY7J,EAAOoE,iBAAmB8D,EAAgBlI,EAAO3B,KAC7DuL,EAAQE,KAAK9J,EAAO2G,gBACpBnE,MAEAqH,KACFvB,EAAetI,EAAO4G,gBAAkBiD,GAuB5C,GAlBI,oBAAsB9J,IACxBpD,EAAMgC,QAAQ2J,EAAgB,SAA0BpK,EAAKO,GAChC,mBAAhB4J,IAAqD,iBAAtB5J,EAAIuH,oBAErCsC,GAAe7J,GAGtBsB,EAAQgK,iBAAiBtL,EAAKP,KAMhC8B,EAAOoE,kBACTrE,EAAQqE,iBAAkB,GAIxBpE,EAAOuJ,aACT,IACExJ,EAAQwJ,aAAevJ,EAAOuJ,aAC9B,MAAOlD,GACP,GAA6B,SAAzBtG,EAAQwJ,aACV,KAAMlD,GAMRrG,EAAOgK,WACa,SAAlBhK,EAAOiB,QAAuC,QAAlBjB,EAAOiB,OACrClB,EAAQkK,OAAOC,iBAAiB,WAAYlK,EAAOgK,UACxB,QAAlBhK,EAAOiB,QAChBlB,EAAQmK,iBAAiB,WAAYlK,EAAOgK,WAI5BxH,SAAhB6F,IACFA,EAAc,MAIhBtI,EAAQoK,KAAK9B,KAMV,SAASxM,EAAQD,EAASoH,GAM/B,QAAS/E,GAAOC,GACd,MAAOC,oBAAmBD,GACxBF,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAVrB,GAAIrB,GAAQqG,EAAoB,EAoBhCnH,GAAOD,QAAU,SAAkByC,EAAKC,EAAQ4K,GAE9C,IAAK5K,EACH,MAAOD,EAGT,IAAI+L,EACJ,IAAIlB,EACFkB,EAAmBlB,EAAiB5K,OAC/B,CACL,GAAIC,KAEJ5B,GAAMgC,QAAQL,EAAQ,SAAmBJ,EAAKO,GAChC,OAARP,GAA+B,mBAARA,KAIvBvB,EAAM+B,QAAQR,KAChBO,GAAY,MAGT9B,EAAM+B,QAAQR,KACjBA,GAAOA,IAGTvB,EAAMgC,QAAQT,EAAK,SAAoBU,GACjCjC,EAAMyK,OAAOxI,GACfA,EAAIA,EAAEI,cACGrC,EAAMsC,SAASL,KACxBA,EAAIqH,KAAKC,UAAUtH,IAErBL,EAAMY,KAAKlB,EAAOQ,GAAO,IAAMR,EAAOW,SAI1CwL,EAAmB7L,EAAMnB,KAAK,KAOhC,MAJIgN,KACF/L,IAA6B,KAArBA,EAAIe,QAAQ,KAAc,IAAM,KAAOgL,GAG1C/L,IAOJ,SAASxC,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,EAehCnH,GAAOD,QAAU,SAAsByI,GACrC,GACI5F,GACAP,EACAiE,EAHAkI,IAKJ,OAAKhG,IAEL1H,EAAMgC,QAAQ0F,EAAQiG,MAAM,MAAO,SAAgBC,GACjDpI,EAAIoI,EAAKnL,QAAQ,KACjBX,EAAM9B,EAAM4K,KAAKgD,EAAKC,OAAO,EAAGrI,IAAI6D,cACpC9H,EAAMvB,EAAM4K,KAAKgD,EAAKC,OAAOrI,EAAI,IAE7B1D,IACF4L,EAAO5L,GAAO4L,EAAO5L,GAAO4L,EAAO5L,GAAO,KAAOP,EAAMA,KAIpDmM,GAZgBA,IAkBpB,SAASxO,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,EAUhCnH,GAAOD,QAAU,SAAuBmB,EAAMsH,EAASoG,GAMrD,MAJA9N,GAAMgC,QAAQ8L,EAAK,SAAmBnO,GACpCS,EAAOT,EAAGS,EAAMsH,KAGXtH,IAMJ,SAASlB,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,EAEhCnH,GAAOD,QACLe,EAAM8K,uBAIN,WAWE,QAASiD,GAAWrM,GAClB,GAAIsM,GAAOtM,CAWX,OATIuM,KAEFC,EAAeC,aAAa,OAAQH,GACpCA,EAAOE,EAAeF,MAGxBE,EAAeC,aAAa,OAAQH,IAIlCA,KAAME,EAAeF,KACrBI,SAAUF,EAAeE,SAAWF,EAAeE,SAAS/M,QAAQ,KAAM,IAAM,GAChFgN,KAAMH,EAAeG,KACrBC,OAAQJ,EAAeI,OAASJ,EAAeI,OAAOjN,QAAQ,MAAO,IAAM,GAC3EkN,KAAML,EAAeK,KAAOL,EAAeK,KAAKlN,QAAQ,KAAM,IAAM,GACpEmN,SAAUN,EAAeM,SACzBC,KAAMP,EAAeO,KACrBrK,SAAiD,MAAtC8J,EAAe9J,SAASsK,OAAO,GAChCR,EAAe9J,SACf,IAAM8J,EAAe9J,UAhCnC,GAEIuK,GAFAV,EAAO,kBAAkBW,KAAKC,UAAUC,WACxCZ,EAAiBnD,SAASC,cAAc,IA2C5C,OARA2D,GAAYZ,EAAW7L,OAAO6M,SAASf,MAQhC,SAAyBgB,GAC9B,GAAItB,GAAU1N,EAAM8C,SAASkM,GAAejB,EAAWiB,GAAcA,CACrE,OAAQtB,GAAOU,WAAaO,EAAUP,UAChCV,EAAOW,OAASM,EAAUN,SAKpC,WACE,MAAO,YACL,OAAO,OAQR,SAASnP,EAAQD,GAQtB,QAASgQ,KACPzP,KAAK0P,QAAU,uCAMjB,QAAS1D,GAAK2D,GAGZ,IAEE,GAAIC,GAAOC,EAJTxE,EAAMyE,OAAOH,GACbI,EAAS,GAGUC,EAAM,EAAGC,EAAMC,EAIpC7E,EAAI6D,OAAa,EAANc,KAAaC,EAAM,IAAKD,EAAM,GAEzCD,GAAUE,EAAIf,OAAO,GAAKU,GAAS,EAAII,EAAM,EAAI,GACjD,CAEA,GADAH,EAAWxE,EAAI8E,WAAWH,GAAO,KAC7BH,EAAW,IACb,KAAM,IAAIJ,EAEZG,GAAQA,GAAS,EAAIC,EAEvB,MAAOE,GA5BT,GAAIG,GAAQ,mEAKZT,GAAE1H,UAAY,GAAIpE,OAClB8L,EAAE1H,UAAUyF,KAAO,EACnBiC,EAAE1H,UAAU1E,KAAO,wBAwBnB3D,EAAOD,QAAUuM,GAKZ,SAAStM,EAAQD,GAWtBC,EAAOD,QAAU,SAAgBuF,EAASf,EAAQH,GAChD,GAAI6G,GAAiB7G,EAASD,OAAO8G,cAEhC7G,GAAS8G,QAAWD,IAAkBA,EAAe7G,EAAS8G,QAGjE3G,EAAOH,GAFPkB,EAAQlB,KASP,SAASpE,EAAQD,EAASoH,GAI/B,GAAIrG,GAAQqG,EAAoB,EAEhCnH,GAAOD,QACLe,EAAM8K,uBAGN,WACE,OACE8E,MAAO,SAAe/M,EAAMrC,EAAOqP,EAASC,EAAMC,EAAQC,GACxD,GAAIC,KACJA,GAAOzN,KAAKK,EAAO,IAAMrB,mBAAmBhB,IAExCR,EAAMwK,SAASqF,IACjBI,EAAOzN,KAAK,WAAa,GAAI0N,MAAKL,GAASM,eAGzCnQ,EAAM8C,SAASgN,IACjBG,EAAOzN,KAAK,QAAUsN,GAGpB9P,EAAM8C,SAASiN,IACjBE,EAAOzN,KAAK,UAAYuN,GAGtBC,KAAW,GACbC,EAAOzN,KAAK,UAGduI,SAASkF,OAASA,EAAOxP,KAAK,OAGhC0M,KAAM,SAActK,GAClB,GAAIuN,GAAQrF,SAASkF,OAAOG,MAAM,GAAIC,QAAO,aAAexN,EAAO,aACnE,OAAQuN,GAAQE,mBAAmBF,EAAM,IAAM,MAGjDG,OAAQ,SAAgB1N,GACtBrD,KAAKoQ,MAAM/M,EAAM,GAAIqN,KAAKM,MAAQ,YAMxC,WACE,OACEZ,MAAO,aACPzC,KAAM,WAAkB,MAAO,OAC/BoD,OAAQ,kBAQT,SAASrR,EAAQD,EAASoH,GAM/B,QAASY,KACPzH,KAAKiR,YAHP,GAAIzQ,GAAQqG,EAAoB,EAchCY,GAAmBM,UAAUmJ,IAAM,SAAaxI,EAAWC,GAKzD,MAJA3I,MAAKiR,SAASjO,MACZ0F,UAAWA,EACXC,SAAUA,IAEL3I,KAAKiR,SAASzP,OAAS,GAQhCiG,EAAmBM,UAAUoJ,MAAQ,SAAejN,GAC9ClE,KAAKiR,SAAS/M,KAChBlE,KAAKiR,SAAS/M,GAAM,OAYxBuD,EAAmBM,UAAUvF,QAAU,SAAiBrC,GACtDK,EAAMgC,QAAQxC,KAAKiR,SAAU,SAAwBG,GACzC,OAANA,GACFjR,EAAGiR,MAKT1R,EAAOD,QAAUgI,GAKZ,SAAS/H,EAAQD,GAUtBC,EAAOD,QAAU,SAAuByC,GAItC,MAAO,gCAAgCkN,KAAKlN,KAMzC,SAASxC,EAAQD,GAWtBC,EAAOD,QAAU,SAAqBuI,EAASqJ,GAC7C,MAAOrJ,GAAQnG,QAAQ,OAAQ,IAAM,IAAMwP,EAAYxP,QAAQ,OAAQ,MAMpE,SAASnC,EAAQD,GAItBC,EAAOD,QAAU,SAAcU,EAAImR,GACjC,MAAO,YAEL,IAAK,GADD7P,GAAO,GAAIC,OAAMH,UAAUC,QACtBwE,EAAI,EAAGA,EAAIvE,EAAKD,OAAQwE,IAC/BvE,EAAKuE,GAAKzE,UAAUyE,EAEtB,OAAO7F,GAAG0E,MAAMyM,EAAS7P,MAOxB,SAAS/B,EAAQD,GAwBtBC,EAAOD,QAAU,SAAgB8R,GAC/B,MAAO,UAAcxL,GACnB,MAAOwL,GAAS1M,MAAM,KAAMkB,YAW7ByL,EAAW9K,GAA0B,gBAAVA,IAAsB,WAAaA,GAAQA,EAAe,QAAIA,EAEzF+K,EAAO,WAGT,IAAK,GAFDlR,GAAOP,KAEFsB,EAAOC,UAAUC,OAAQC,EAAOC,MAAMJ,GAAOK,EAAO,EAAUL,EAAPK,EAAaA,IAC3EF,EAAKE,GAAQJ,UAAUI,EAGzB,IAAIrB,GAAOmB,EAAKA,EAAKD,OAAS,EAE9B,OADAjB,GAAKmR,IAAI7M,MAAMtE,GAAOD,EAAKQ,IAAI6Q,OAAOlQ,IAC/BxB,EAAOO,MAAMwE,WAGlB4M,EAAQ,WAGV,IAAK,GAFDrR,GAAOP,KAEF6R,EAAQtQ,UAAUC,OAAQC,EAAOC,MAAMmQ,GAAQC,EAAQ,EAAWD,EAARC,EAAeA,IAChFrQ,EAAKqQ,GAASvQ,UAAUuQ,EAG1B,IAAIxR,GAAOmB,EAAKA,EAAKD,OAAS,EAE9B,OADAjB,GAAKmR,IAAI7M,MAAMtE,GAAOD,EAAKQ,IAAI6Q,OAAOlQ,IAC/BxB,EAAOO,MAAMwE,WAGlB+M,EAAS,SAAgBC,GAC3B,GAAIC,MACAC,IAQJ,OAPAF,GAAMxP,QAAQ,SAAU2P,GAClBA,IAAQF,KAGZC,EAAMlP,KAAKmP,GACXF,EAAKE,GAAQ,KAERD,GAGLE,EAAmB,SAA0B1O,EAAQ2O,EAAO/R,GAC9DA,IAASA,MACTA,EAAKgS,OAAShS,EAAKgS,QACnB,IAAIC,GAAiB7O,EAAO6O,mBACxBC,EAAUD,EAAenR,OAAO,SAAUJ,GAC5C,MAAoC,KAA7BV,EAAKgS,KAAKrP,QAAQjC,IAE3B,OAAOf,GAAOO,MAAMiS,KAAKJ,EAAOG,IAG9B9R,GAQFgS,OAAO,EASPC,KAAK,EA4DPtS,GAAQuS,OAAS3S,EAAOO,MAAMoS,OAE9B3S,EAAOO,MAAMqS,uBAAuBxS,EAAQ0H,WAsB1C+K,WAAYlB,EAuBZmB,YAAanB,EAuBboB,gBAAiBpB,EAuBjBqB,aAAcrB,EAuBdsB,gBAAiBtB,EAuBjBuB,UAAWvB,EAuBXwB,aAAcxB,EAwBdyB,SAAUzB,EAwBV0B,YAAa1B,EAwBb2B,eAAgB3B,EAuBhB4B,gBAAiB5B,EAkBjB6B,YAAahC,EAoBbiC,aAAcjC,EAoBdkC,iBAAkBlC,EAkBlBmC,cAAenC,EAkBfoC,iBAAkBpC,EAkBlBqC,WAAYrC,EAkBZsC,cAAetC,EAkBfuC,UAAWvC,EAqBXwC,aAAcxC,EAqBdyC,gBAAiBzC,EAoBjB0C,iBAAkB1C,EAQlBC,IAAK,WACH,IAAK,GAAI0C,GAAQ7S,UAAUC,OAAQC,EAAOC,MAAM0S,GAAQC,EAAQ,EAAWD,EAARC,EAAeA,IAChF5S,EAAK4S,GAAS9S,UAAU8S,EAG1BrU,MAAKsU,IAAIzP,MAAM7E,MAAO,SAAS2R,OAAOlQ,KAuBxC8S,MAAO,SAAe7Q,EAAQ8Q,EAAOlU,GACnC,GAAIC,GAAOP,KACPc,EAAK,MAMT,OALA0T,KAAUA,MACVlU,IAASA,MAGTQ,EAAKR,EAAKQ,GAAK,cACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,IAAO2E,KAAK,WAI9D,MAFAnE,GAAKR,EAAKQ,GAAK,QACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ8Q,EAAOlU,GACrBL,EAAOO,MAAMwE,QAAQzE,EAAKkU,OAAO/Q,EAAQ8Q,EAAOlU,MACtD2E,KAAK,SAAUyP,GAChB,GAAIC,GAAWnR,EAAaqC,cAAc6O,EAAS,GAE/C9T,EAAO+T,EAAS,GAChB/S,EAAS+S,EAAS,EAEtB/S,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQd,EAK1C,OAJAgD,GAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,aACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,EAAMwD,IAAWmB,KAAK,SAAU4P,GAElF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAkB9D/L,OAAQ,SAAgBpF,EAAQ2O,EAAO/R,GACrC,GAAIC,GAAOP,KACPc,EAAK,MAMT,OALAuR,KAAUA,MACV/R,IAASA,MAGTQ,EAAKR,EAAKQ,GAAK,eACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAO/R,IAAO2E,KAAK,SAAU6P,GAMxE,MAJAzC,GAAQpS,EAAOO,MAAMoJ,YAAYkL,GAAUzC,EAAQyC,EACnDzC,EAAQD,EAAiB1O,EAAQ2O,EAAO/R,GACxCQ,EAAKR,EAAKQ,GAAK,SACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ2O,EAAO/R,GACrBL,EAAOO,MAAMwE,QAAQzE,EAAKwU,QAAQrR,EAAQ2O,EAAO/R,MACvD2E,KAAK,SAAUyP,GAChB,GAAIM,GAAYxR,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAOoU,EAAU,GACjBpT,EAASoT,EAAU,EAEvBpT,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,SAM1C,OALAkC,GAASmR,QAAUrU,EAAO,EAAI,EAC9BkD,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,cACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAO/R,EAAMwD,IAAWmB,KAAK,SAAU4P,GAElF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAkB9DK,WAAY,SAAoBxR,EAAQ2O,EAAO/R,GAC7C,GAAIC,GAAOP,KACPc,EAAK,MAMT,OALAuR,KAAUA,MACV/R,IAASA,MAGTQ,EAAKR,EAAKQ,GAAK,mBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAO/R,IAAO2E,KAAK,SAAU6P,GAQxE,MANAzC,GAAQpS,EAAOO,MAAMoJ,YAAYkL,GAAUzC,EAAQyC,EACnDzC,EAAQA,EAAMpC,IAAI,SAAUkF,GAC1B,MAAO/C,GAAiB1O,EAAQyR,EAAQ7U,KAE1CQ,EAAKR,EAAKQ,GAAK,aACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ2O,EAAO/R,GACrBL,EAAOO,MAAMwE,QAAQzE,EAAK6U,YAAY1R,EAAQ2O,EAAO/R,MAC3D2E,KAAK,SAAUyP,GAChB,GAAIW,GAAY7R,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAOyU,EAAU,GACjBzT,EAASyT,EAAU,EAEvBzU,KAASA,MACTgB,IAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,aAM1C,OALAkC,GAASmR,QAAUrU,EAAKY,OACxBsC,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,kBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAO/R,EAAMwD,IAAWmB,KAAK,SAAU4P,GAElF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAmB9DS,QAAS,SAAiB5R,EAAQQ,EAAI5D,GACpC,GAAIC,GAAOP,KACPc,EAAK,MAKT,OAJAR,KAASA,MAGTQ,EAAKR,EAAKQ,GAAK,gBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAI5D,IAAO2E,KAAK,WAG3D,MAFAnE,GAAKR,EAAKQ,GAAK,UACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQQ,EAAI5D,GAClBL,EAAOO,MAAMwE,QAAQzE,EAAKgV,SAAS7R,EAAQQ,EAAI5D,MACrD2E,KAAK,SAAUyP,GAChB,GAAIc,GAAYhS,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAO4U,EAAU,GACjB5T,EAAS4T,EAAU,EAEvB5T,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,UAK1C,OAJAkC,GAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,eACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAI5D,EAAMwD,IAAWmB,KAAK,SAAU4P,GAE/E,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAyB9DY,WAAY,SAAoB/R,EAAQ8Q,EAAOlU,GAC7C,GAAIC,GAAOP,KACPc,EAAK,MAMT,OALA0T,KAAUA,MACVlU,IAASA,MAGTQ,EAAKR,EAAKQ,GAAK,mBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,IAAO2E,KAAK,WAG9D,MAFAnE,GAAKR,EAAKQ,GAAK,aACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ8Q,EAAOlU,GACrBL,EAAOO,MAAMwE,QAAQzE,EAAKmV,YAAYhS,EAAQ8Q,EAAOlU,MAC3D2E,KAAK,SAAUyP,GAChB,GAAIiB,GAAYnS,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAO+U,EAAU,GACjB/T,EAAS+T,EAAU,EAEvB/T,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,aAK1C,OAJAkC,GAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,kBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,EAAMwD,IAAWmB,KAAK,SAAU4P,GAElF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAe9De,cAAe,SAAuBlS,EAAQmS,EAAKC,EAASC,GAC1D,GAAIxV,GAAOP,KACPgW,EAAcH,EAAII,aAEtB,KAAIhW,EAAOO,MAAMsC,SAASgT,IAAa7V,EAAOO,MAAM+B,QAAQuT,GAWrD,CACL,GAAII,GAAOJ,EAAQ7F,IAAI,SAAUkF,GAC/B,MAAO5U,GAAK4V,wBAAwBzS,EAAQmS,EAAKV,KAChD/T,OAAO,SAAUkB,GAClB,MAAOA,IAET,OAAO/B,GAAK6V,QAAQJ,GAClBK,MAAO7S,EAAagC,kBAAmBwQ,EAAYM,aACjDC,GAAML,KAEPH,GAAQ9Q,KAAK,SAAUuR,GACxBV,EAAQtT,QAAQ,SAAU2S,GACxBqB,EAAahU,QAAQ,SAAUiU,GACzBA,EAAYT,EAAYM,eAAiBnB,EAAOU,EAAIa,aACtDb,EAAIc,cAAcxB,EAAQsB,SAxBlC,GAAIG,GAAO,WACT,GAAIzB,GAASW,CACb,QACErT,EAAGlC,EAAKsW,KAAKb,EAAazV,EAAK4V,wBAAwBzS,EAAQmS,EAAKV,GAASY,GAAQ9Q,KAAK,SAAUwR,GAClGZ,EAAIc,cAAcxB,EAAQsB,QAKhC,OAAgF,YAA3D,mBAATG,GAAuB,YAAcpT,EAAaC,OAAOmT,IAA4BA,EAAKnU,EAAtG,QAqCJoU,KAAM,SAAcnT,EAAQQ,EAAI5D,GAC9B,GAAIC,GAAOP,KACPmV,EAAS,OACTrU,EAAK,MAMT,OALAR,KAASA,MACTA,EAAKgS,OAAShS,EAAKgS,SAGnBxR,EAAKR,EAAKQ,GAAK,aACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAI5D,IAAO2E,KAAK,WAG3D,MAFAnE,GAAKR,EAAKQ,GAAK,OACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQQ,EAAI5D,GAClBL,EAAOO,MAAMwE,QAAQzE,EAAKuW,MAAMpT,EAAQQ,EAAI5D,MAClD2E,KAAK,SAAUyP,GAChB,GAAIqC,GAAYvT,EAAaqC,cAAc6O,EAAS,GAEhDsC,EAAUD,EAAU,EAExB,IAAKC,EAAL,CAGA7B,EAAS6B,CACT,IAAIC,KAsBJ,OApBAhX,GAAOO,MAAM0W,gBAAgBxT,EAAQpD,EAAM,SAAUuV,EAAKE,GACxD,GAAIoB,GAAO,QACPtB,EAAIa,YAA4B,WAAbb,EAAIuB,MAAkC,YAAbvB,EAAIuB,KAM5B,YAAbvB,EAAIuB,MAAsBvB,EAAIwB,UACvCF,EAAO5W,EAAK+W,qBAAqB5T,EAAQmS,EAAKV,EAAQY,GAChC,YAAbF,EAAIuB,MAAsBvB,EAAI0B,YACvCJ,EAAO5W,EAAKiX,uBAAuB9T,EAAQmS,EAAKV,EAAQY,GAClC,cAAbF,EAAIuB,OACbD,EAAO5W,EAAKqV,cAAclS,EAAQmS,EAAKV,EAAQY,IAT7CoB,EADe,WAAbtB,EAAIuB,KACC7W,EAAKkX,WAAW/T,EAAQmS,EAAKV,EAAQY,GAErCxV,EAAKmX,YAAYhU,EAAQmS,EAAKV,EAAQY,GAS7CoB,GACFF,EAAMjU,KAAKmU,KAIR5O,QAAQQ,IAAIkO,MAClBhS,KAAK,WACN,GAAInB,GAAW,GAAInD,GAASwU,KAAY,OAMxC,OALArR,GAAS6T,MAAQxC,EAAS,EAAI,EAC9BrR,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAI5D,EAAMwD,IAAWmB,KAAK,SAAU4P,GAE/E,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAyB9DuB,QAAS,SAAiB1S,EAAQ8Q,EAAOlU,GACvC,GAAIC,GAAOP,IACXM,KAASA,MACTA,EAAKgS,OAAShS,EAAKgS,QAEnB,IAAIwD,MACAhV,EAAK,OACL8W,EAAatX,EAAKuX,WAEtB,IAAI5X,EAAOO,MAAMsC,SAAS8U,GAAa,CACrC,GAAIE,GAAcF,EAAWpD,SACzBoD,GAAW/V,QACb2S,EAAQsD,EAER7X,EAAOO,MAAMuX,WAAWvD,EAAOsD,GAMnC,MADAhX,GAAKR,EAAKQ,GAAK,gBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,IAAO2E,KAAK,WAG9D,MAFAnE,GAAKR,EAAKQ,GAAK,UACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ8Q,EAAOlU,GACrBL,EAAOO,MAAMwE,QAAQzE,EAAKyX,SAAStU,EAAQ8Q,EAAOlU,MACxD2E,KAAK,SAAUyP,GAChB,GAAIuD,GAAYzU,EAAaqC,cAAc6O,EAAS,GAEhDwD,EAAWD,EAAU,EAEzBC,KAAaA,MACbpC,EAAUoC,CACV,IAAIjB,KAoBJ,OAnBAhX,GAAOO,MAAM0W,gBAAgBxT,EAAQpD,EAAM,SAAUuV,EAAKE,GACxD,GAAIoB,GAAO,QACPtB,EAAIa,YAA4B,WAAbb,EAAIuB,MAAkC,YAAbvB,EAAIuB,KAM5B,YAAbvB,EAAIuB,MAAsBvB,EAAIwB,UACvCF,EAAO5W,EAAK+W,qBAAqB5T,EAAQmS,EAAKC,EAASC,GACjC,YAAbF,EAAIuB,MAAsBvB,EAAI0B,YACvCJ,EAAO5W,EAAKiX,uBAAuB9T,EAAQmS,EAAKC,EAASC,GACnC,cAAbF,EAAIuB,OACbD,EAAO5W,EAAKqV,cAAclS,EAAQmS,EAAKC,EAASC,IAT9CoB,EADe,YAAbtB,EAAIuB,KACC7W,EAAKmX,YAAYhU,EAAQmS,EAAKC,EAASC,GAEvCxV,EAAKkX,WAAW/T,EAAQmS,EAAKC,EAASC,GAS7CoB,GACFF,EAAMjU,KAAKmU,KAGR5O,QAAQQ,IAAIkO,KAClBhS,KAAK,WACN,GAAInB,GAAW,GAAInD,GAASmV,KAAa,UAMzC,OALAhS,GAAS6T,MAAQ7B,EAAQtU,OACzBsC,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,eACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ8Q,EAAOlU,EAAMwD,IAAWmB,KAAK,SAAU4P,GAElF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAgB9DsD,OAAQ,SAAgBC,EAAK9X,GAE3B,MADAA,KAASA,MACFL,EAAOO,MAAMoJ,YAAYtJ,EAAK8X,IAAQnY,EAAOO,MAAM6X,UAAUrY,KAAKoY,IAAQnY,EAAOO,MAAM6X,UAAU/X,EAAK8X,KAa/GV,YAAa,SAAqBhU,EAAQmS,EAAKC,EAASC,GACtD,GAAIxV,GAAOP,KACPsY,GAAW,CAEXrY,GAAOO,MAAMsC,SAASgT,KAAa7V,EAAOO,MAAM+B,QAAQuT,KAC1DwC,GAAW,EACXxC,GAAWA,GAEb,IAAIyC,GAAMzC,EAAQ7F,IAAI,SAAUkF,GAC9B,MAAO5U,GAAKiY,sBAAsB9U,EAAQmS,EAAKV,KAE7CX,GACF6B,UAEEoC,EAAWjE,EAAM6B,MAAMR,EAAIa,cAS/B,OARI4B,GAEFG,EAAS,MAAQF,EAAI,GAErBE,EAAa,GAAIF,EAAInX,OAAO,SAAU8C,GACpC,MAAOA,KAGJ3D,EAAK6V,QAAQP,EAAII,cAAezB,EAAOuB,GAAQ9Q,KAAK,SAAUuR,GACnEV,EAAQtT,QAAQ,SAAU2S,GACxB,GAAIuD,KAEAJ,GACFI,EAAWlC,EAEXA,EAAahU,QAAQ,SAAUiU,GACzBxW,EAAOO,MAAMmY,IAAIlC,EAAaZ,EAAIa,cAAgBvB,EAAOzR,EAAO4S,cAClEoC,EAAS1V,KAAKyT,KAIpBZ,EAAIc,cAAcxB,EAAQuD,QAIhCpB,qBAAsB,SAA8B5T,EAAQmS,EAAKC,EAASC,GACxE,GAAIxV,GAAOP,KACPmV,EAAS,OACTyD,EAAgB/C,EAAII,aAMxB,IAJIhW,EAAOO,MAAMsC,SAASgT,KAAa7V,EAAOO,MAAM+B,QAAQuT,KAC1DX,EAASW,GAGPX,EACF,MAAO5U,GAAK6V,QAAQwC,GAClBvC,MAAO7S,EAAagC,kBAAmBoT,EAActC,aACnDC,GAAMhW,EAAKsY,qBAAqBnV,EAAQmS,EAAKV,MAE9CY,GAAQ9Q,KAAK,SAAUuR,GACxBX,EAAIc,cAAcxB,EAAQqB,IAG5B,IAAIsC,GAAQ,WACV,GAAIzB,KAIJ,OAHAvB,GAAQtT,QAAQ,SAAU2S,GACxBkC,EAAYA,EAAU1F,OAAOpR,EAAKA,KAAKsY,qBAAqBnV,EAAQmS,EAAKV,OAGzE1S,EAAGlC,EAAK6V,QAAQwC,GACdvC,MAAO7S,EAAagC,kBAAmBoT,EAActC,aACnDC,GAAMxE,EAAOsF,GAAWjW,OAAO,SAAU2X,GACvC,MAAOA,QAGVhD,GAAQ9Q,KAAK,SAAUuR,GAYxB,MAXAV,GAAQtT,QAAQ,SAAU2P,GACxB,GAAIuG,MACAM,EAAW/Y,EAAOO,MAAMmY,IAAIxG,EAAM0D,EAAIwB,cAC1C2B,GAAW/Y,EAAOO,MAAM+B,QAAQyW,GAAYA,EAAWvT,OAAOyQ,KAAK8C,GACnExC,EAAahU,QAAQ,SAAUiU,GACzBuC,GAAyE,KAA7DA,EAAS/V,QAAQwT,EAAYmC,EAActC,eACzDoC,EAAS1V,KAAKyT,KAGlBZ,EAAIc,cAAcxE,EAAMuG,KAEnBlC,OAKb,OAAkF,YAA5D,mBAAVsC,GAAwB,YAActV,EAAaC,OAAOqV,IAA6BA,EAAMrW,EAAzG,QAGJ+U,uBAAwB,SAAgC9T,EAAQmS,EAAKC,EAASC,GAC5E,GAAIxV,GAAOP,KACP4Y,EAAgB/C,EAAII,cACpBK,EAAc5S,EAAO4S,YACrBnB,EAAS,MAMb,OAJIlV,GAAOO,MAAMsC,SAASgT,KAAa7V,EAAOO,MAAM+B,QAAQuT,KAC1DX,EAASW,GAGPX,EACK5U,EAAK6V,QAAQP,EAAII,eACtBI,MAAO7S,EAAagC,kBAAmBqQ,EAAI0B,aACzC0B,SAAY1Y,EAAK2Y,uBAAuBxV,EAAQmS,EAAKV,MAEtDY,GAAQ9Q,KAAK,SAAUuR,GACxBX,EAAIc,cAAcxB,EAAQqB,KAGrBjW,EAAK6V,QAAQwC,GAClBvC,MAAO7S,EAAagC,kBAAmBqQ,EAAI0B,aACzC4B,cAAiBrD,EAAQ7F,IAAI,SAAUkF,GACrC,MAAO5U,GAAK2Y,uBAAuBxV,EAAQmS,EAAKV,QAGnDY,GAAQ9Q,KAAK,SAAUuR,GACxB,GAAI4C,GAAmBvD,EAAI0B,WAC3BzB,GAAQtT,QAAQ,SAAU2S,GACxB,GAAIkE,MACAnV,EAAKjE,EAAOO,MAAMmY,IAAIxD,EAAQmB,EAClCE,GAAahU,QAAQ,SAAUiU,GAC7B,GAAIc,GAActX,EAAOO,MAAMmY,IAAInC,EAAc4C,MACjB,MAA5B7B,EAAYtU,QAAQiB,IACtBmV,EAAcrW,KAAKyT,KAGvBZ,EAAIc,cAAcxB,EAAQkE,QAgBlC5B,WAAY,SAAoB/T,EAAQmS,EAAKC,EAASC,GAIpD,MAHI9V,GAAOO,MAAMsC,SAASgT,KAAa7V,EAAOO,MAAM+B,QAAQuT,KAC1DA,GAAWA,IAEN9V,KAAK0X,YAAYhU,EAAQmS,EAAKC,EAASC,GAAQ9Q,KAAK,WACzD6Q,EAAQtT,QAAQ,SAAU2S,GACxB,GAAImE,GAAczD,EAAI0D,cAAcpE,EAChClV,GAAOO,MAAM+B,QAAQ+W,IAAgBA,EAAY9X,QACnDqU,EAAIc,cAAcxB,EAAQmE,EAAY,SAgB9ChF,IAAK,SAAakF,GAChB,IAAK,GAAIC,GAAQlY,UAAUC,OAAQC,EAAOC,MAAM+X,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAWD,EAARC,EAAeA,IACpGjY,EAAKiY,EAAQ,GAAKnY,UAAUmY,EAO9B,IAJIF,IAAU/X,EAAKD,SACjBC,EAAKuB,KAAKwW,GACVA,EAAQ,SAEI,UAAVA,GAAsBxZ,KAAK0S,MAA/B,CAGA,GAAIiH,GAASH,EAAM1M,cAAgB,aACnC,IAAI8M,QAAQJ,GAAQ,CAClB,GAAIK,IAEHA,EAAWD,SAASJ,GAAO3U,MAAMgV,GAAWF,GAAQhI,OAAOlQ,QACvD,CACL,GAAIqY,IAEHA,EAAYF,SAAStF,IAAIzP,MAAMiV,GAAYH,GAAQhI,OAAOlQ,OAiB/D+W,sBAAuB,SAA+B9U,EAAQmS,EAAKV,GACjE,MAAOU,GAAIkE,cAAc5E,IAa3B0D,qBAAsB,SAA8BnV,EAAQmS,EAAKV,GAC/D,GAAIkC,MACA2B,EAAW/Y,EAAOO,MAAMmY,IAAIxD,EAAQU,EAAIwB,cAG5C,OAFA2B,GAAW/Y,EAAOO,MAAM+B,QAAQyW,GAAYA,EAAWvT,OAAOyQ,KAAK8C,GACnE3B,EAAYA,EAAU1F,OAAOqH,GACtBjH,EAAOsF,GAAWjW,OAAO,SAAU2X,GACxC,MAAOA,MAcXG,uBAAwB,SAAgCxV,EAAQmS,EAAKV,GACnE,MAAOlV,GAAOO,MAAMmY,IAAIxD,EAAQzR,EAAO4S,cAazCH,wBAAyB,SAAiCzS,EAAQmS,EAAKV,GACrE,MAAOU,GAAIkE,cAAc5E,IAwB3B6E,IAAK,SAAatW,EAAQuW,EAAOzF,EAAOlU,GACtC,GAAIC,GAAOP,KACPc,EAAK,MACT,KAAKb,EAAOO,MAAM8C,SAAS2W,GACzB,KAAM,IAAItW,OAAM,0BAOlB,OALA6Q,KAAUA,MACVlU,IAASA,MAGTQ,EAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQuW,EAAOzF,EAAOlU,IAAO2E,KAAK,WAIrE,MAFAnE,GAAKR,EAAKQ,GAAK,MACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQuW,EAAOzF,EAAOlU,GAC5BL,EAAOO,MAAMwE,QAAQzE,EAAK2Z,KAAKxW,EAAQuW,EAAOzF,EAAOlU,MAC3D2E,KAAK,SAAUyP,GAChB,GAAIyF,GAAY3W,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAOuZ,EAAU,GACjBvY,EAASuY,EAAU,EAEvBvY,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQd,EAK1C,OAJAgD,GAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,WACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQuW,EAAOzF,EAAOlU,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEzF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAc9DD,QAAS,SAAiB9Q,EAAUxD,GAClC,MAAON,MAAKmY,OAAO,MAAO7X,GAAQwD,EAAWA,EAASlD,MAkBxDwZ,OAAQ,SAAgB1W,EAAQQ,EAAImO,EAAO/R,GACzC,GAAIC,GAAOP,IACXqS,KAAUA,MACV/R,IAASA,KACT,IAAIQ,GAAK,MAIT,OADAA,GAAKR,EAAKQ,GAAK,eACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAImO,EAAO/R,IAAO2E,KAAK,SAAU6P,GAM5E,MAJAzC,GAAQpS,EAAOO,MAAMoJ,YAAYkL,GAAUzC,EAAQyC,EACnDzC,EAAQD,EAAiB1O,EAAQ2O,EAAO/R,GACxCQ,EAAKR,EAAKQ,GAAK,SACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQQ,EAAImO,EAAO/R,GACzBL,EAAOO,MAAMwE,QAAQzE,EAAK8Z,QAAQ3W,EAAQQ,EAAImO,EAAO/R,MAC3D2E,KAAK,SAAUyP,GAChB,GAAI4F,GAAY9W,EAAaqC,cAAc6O,EAAS,GAEhD9T,EAAO0Z,EAAU,GACjB1Y,EAAS0Y,EAAU,EAEvB1Y,KAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,SAM1C,OALAkC,GAASyW,QAAU3Z,EAAO,EAAI,EAC9BkD,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,cACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQQ,EAAImO,EAAO/R,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEtF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OA0B9D2F,UAAW,SAAmB9W,EAAQ2O,EAAOmC,EAAOlU,GAClD,GAAIC,GAAOP,IACXqS,KAAUA,MACVmC,IAAUA,MACVlU,IAASA,KACT,IAAIQ,GAAK,MAIT,OADAA,GAAKR,EAAKQ,GAAK,kBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAOmC,EAAOlU,IAAO2E,KAAK,SAAU6P,GAM/E,MAJAzC,GAAQpS,EAAOO,MAAMoJ,YAAYkL,GAAUzC,EAAQyC,EACnDzC,EAAQD,EAAiB1O,EAAQ2O,EAAO/R,GACxCQ,EAAKR,EAAKQ,GAAK,YACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQ2O,EAAOmC,EAAOlU,GAC5BL,EAAOO,MAAMwE,QAAQzE,EAAKka,WAAW/W,EAAQ2O,EAAOmC,EAAOlU,MACjE2E,KAAK,SAAUyP,GAChB,GAAIgG,GAAalX,EAAaqC,cAAc6O,EAAS,GAEjD9T,EAAO8Z,EAAW,GAClB9Y,EAAS8Y,EAAW,EAExB9Z,KAASA,MACTgB,IAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,YAM1C,OALAkC,GAASyW,QAAU3Z,EAAKY,OACxBsC,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,iBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQ2O,EAAOmC,EAAOlU,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEzF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAkB9D8F,WAAY,SAAoBjX,EAAQoS,EAASxV,GAC/C,GAAIC,GAAOP,IACX8V,KAAYA,MACZxV,IAASA,KACT,IAAIQ,GAAK,OACLwV,EAAc5S,EAAO4S,WAQzB,OANAR,GAAUA,EAAQ1U,OAAO,SAAU+T,GACjC,MAAOlV,GAAOO,MAAMmY,IAAIxD,EAAQmB,KAIlCxV,EAAKR,EAAKQ,GAAK,mBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQoS,EAASxV,IAAO2E,KAAK,SAAUiT,GAQ1E,MANApC,GAAU7V,EAAOO,MAAMoJ,YAAYsO,GAAYpC,EAAUoC,EACzDpC,EAAUA,EAAQ7F,IAAI,SAAUkF,GAC9B,MAAO/C,GAAiB1O,EAAQyR,EAAQ7U,KAE1CQ,EAAKR,EAAKQ,GAAK,aACfP,EAAKmR,IAAI5Q,EAAI4C,EAAQoS,EAASxV,GACvBL,EAAOO,MAAMwE,QAAQzE,EAAKqa,YAAYlX,EAAQoS,EAASxV,MAC7D2E,KAAK,SAAUyP,GAChB,GAAImG,GAAarX,EAAaqC,cAAc6O,EAAS,GAEjD9T,EAAOia,EAAW,GAClBjZ,EAASiZ,EAAW,EAExBja,KAASA,MACTgB,IAAWA,KACX,IAAIkC,GAAW,GAAInD,GAASC,EAAMgB,EAAQ,aAM1C,OALAkC,GAASyW,QAAU3Z,EAAKY,OACxBsC,EAAWvD,EAAKqU,QAAQ9Q,EAAUxD,GAGlCQ,EAAKR,EAAKQ,GAAK,kBACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAI4C,EAAQoS,EAASxV,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEpF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,QAMhE,IAAIiG,IAAW,CAEf,KACEA,EAAWpY,QAAUA,OAAOqY,MAC5B,MAAO7Q,IAsDT,GAAI8Q,GAAY3a,EAAQ0H,UAEpB5E,GAMFuB,SAAU,GAOVuW,oBAAoB,EAMpBC,KAAM1J,EAMN2J,cAMAC,OAAQ,GAORC,UAAU,EA8BZnY,GAAY6E,UAAYtC,OAAOqD,OAAOzI,EAAQ0H,WAC5CxC,aACEvE,MAAOkC,EACPwC,YAAY,EACZE,UAAU,EACVD,cAAc,KAIlBF,OAAOD,eAAetC,EAAa,aACjCyC,cAAc,EACd3E,MAAOX,IAyBT6C,EAAY0P,OAAS3S,EAAOO,MAAMoS,OAElC3S,EAAOO,MAAMqS,uBAAuB3P,EAAY6E,WAS9CuT,SAAU1J,EAUV2J,SAAU3J,EASV4J,UAAW5J,EAWX6J,UAAW7J,EAWX8J,SAAU9J,EASV+J,UAAWlK,EASXmK,UAAWnK,EAQXoK,WAAYpK,EAUZqK,WAAYrK,EAUZsK,UAAWtK,EAEXgD,OAAQ,SAAgB/Q,EAAQ8Q,EAAOlU,GACrC,GAAIC,GAAOP,IACX,OAAOO,GAAKyb,IAAIzb,EAAK0b,QAAQ,QAASvY,EAAQpD,EAAK6B,OAAQ7B,GAAOA,GAAM2E,KAAK,SAAUnB,GACrF,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCiR,QAAS,SAAiBrR,EAAQ2O,EAAO/R,GACvC,GAAIC,GAAOP,IACX,OAAOO,GAAK4b,KAAK5b,EAAK0b,QAAQ,SAAUvY,EAAQ2O,EAAO/R,GAAOC,EAAK6b,UAAU1Y,EAAQ2O,EAAO/R,GAAOA,GAAM2E,KAAK,SAAUnB,GACtH,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCsR,YAAa,SAAqB1R,EAAQ2O,EAAO/R,GAC/C,GAAIC,GAAOP,IACX,OAAOO,GAAK4b,KAAK5b,EAAK0b,QAAQ,aAAcvY,EAAQ,KAAMpD,GAAOC,EAAK6b,UAAU1Y,EAAQ2O,EAAO/R,GAAOA,GAAM2E,KAAK,SAAUnB,GACzH,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCyR,SAAU,SAAkB7R,EAAQQ,EAAI5D,GACtC,GAAIC,GAAOP,IACX,OAAOO,GAAK8b,IAAI9b,EAAK0b,QAAQ,UAAWvY,EAAQQ,EAAI5D,GAAOA,GAAM2E,KAAK,SAAUnB,GAC9E,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnC4R,YAAa,SAAqBhS,EAAQ8Q,EAAOlU,GAC/C,GAAIC,GAAOP,IACX,OAAOO,GAAK8b,IAAI9b,EAAK0b,QAAQ,aAAcvY,EAAQ,KAAMpD,GAAOA,GAAM2E,KAAK,SAAUnB,GACnF,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCoY,KAAM,SAAcxY,EAAQpD,EAAMwD,GAChC,OAAQ9D,KAAKsc,YAAY5Y,EAAQI,EAAUxD,GAAOwD,IAEpDgT,MAAO,SAAepT,EAAQQ,EAAI5D,GAChC,GAAIC,GAAOP,IACX,OAAOO,GAAKyb,IAAIzb,EAAK0b,QAAQ,OAAQvY,EAAQQ,EAAI5D,GAAOA,GAAM2E,KAAK,SAAUnB,GAC3E,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCkU,SAAU,SAAkBtU,EAAQ8Q,EAAOlU,GACzC,GAAIC,GAAOP,IACX,OAAOO,GAAKyb,IAAIzb,EAAK0b,QAAQ,UAAWvY,EAAQpD,EAAK6B,OAAQ7B,GAAOA,GAAM2E,KAAK,SAAUnB,GACvF,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCoW,KAAM,SAAcxW,EAAQuW,EAAOzF,EAAOlU,GACxC,GAAIC,GAAOP,IACX,OAAOO,GAAKyb,IAAIzb,EAAK0b,QAAQ,MAAOvY,EAAQpD,EAAK6B,OAAQ7B,GAAOA,GAAM2E,KAAK,SAAUnB,GACnF,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnCuW,QAAS,SAAiB3W,EAAQQ,EAAImO,EAAO/R,GAC3C,GAAIC,GAAOP,IACX,OAAOO,GAAKgc,IAAIhc,EAAK0b,QAAQ,SAAUvY,EAAQQ,EAAI5D,GAAOC,EAAK6b,UAAU1Y,EAAQ2O,EAAO/R,GAAOA,GAAM2E,KAAK,SAAUnB,GAClH,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnC2W,WAAY,SAAoB/W,EAAQ2O,EAAOmC,EAAOlU,GACpD,GAAIC,GAAOP,IACX,OAAOO,GAAKgc,IAAIhc,EAAK0b,QAAQ,YAAavY,EAAQ,KAAMpD,GAAOC,EAAK6b,UAAU1Y,EAAQ2O,EAAO/R,GAAOA,GAAM2E,KAAK,SAAUnB,GACvH,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAGnC8W,YAAa,SAAqBlX,EAAQoS,EAASxV,GACjD,GAAIC,GAAOP,IACX,OAAOO,GAAKgc,IAAIhc,EAAK0b,QAAQ,aAAcvY,EAAQ,KAAMpD,GAAOC,EAAK6b,UAAU1Y,EAAQoS,EAASxV,GAAOA,GAAM2E,KAAK,SAAUnB,GAC1H,MAAOvD,GAAK2b,KAAKxY,EAAQpD,EAAMwD,MAiBnCyQ,MAAO,SAAe7Q,EAAQ8Q,EAAOlU,GACnC,GAAIC,GAAOP,IASX,OARAwU,KAAUA,MACVlU,IAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAOoS,OAAQ,EACpBjU,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GACrCL,EAAOO,MAAMuE,UAAUzE,EAAK6B,OAAQqS,GACpClU,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GAEhD0a,EAAUzG,MAAM3R,KAAKrC,EAAMmD,EAAQ8Q,EAAOlU,IAgBnDwI,OAAQ,SAAgBpF,EAAQ2O,EAAO/R,GACrC,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUlS,OAAOlG,KAAKrC,EAAMmD,EAAQ2O,EAAO/R,IAgBpD4U,WAAY,SAAoBxR,EAAQ2O,EAAO/R,GAC7C,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAU9F,WAAWtS,KAAKrC,EAAMmD,EAAQ2O,EAAO/R,IAexD+b,IAAK,SAAana,EAAK2B,EAAQvD,GAC7B,GAAIC,GAAOP,KACPc,EAAK,MAQT,OAPA+C,KAAWA,MACXvD,IAASA,MACTuD,EAAO3B,IAAMA,GAAO2B,EAAO3B,IAC3B2B,EAAOiB,OAASjB,EAAOiB,QAAU,SAGjChE,EAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAK2B,EAAQvD,IAAO2E,KAAK,SAAU0X,GAKtE,MAHA9Y,GAAS5D,EAAOO,MAAMoJ,YAAY+S,GAAW9Y,EAAS8Y,EACtD7b,EAAKR,EAAKQ,GAAK,MACfP,EAAKmR,IAAI5Q,EAAIoB,EAAK2B,EAAQvD,GACnBC,EAAK2E,KAAKrB,EAAQvD,KACxB2E,KAAK,SAAUnB,GAGhB,MADAhD,GAAKR,EAAKQ,GAAK,WACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAK2B,EAAQvD,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEhF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAiB9DyH,YAAa,SAAqB5Y,EAAQI,EAAUxD,GAElD,MADAA,KAASA,MACLL,EAAOO,MAAM0K,WAAW5K,EAAKgc,aACxBhc,EAAKgc,YAAY5Y,EAAQI,EAAUxD,GAExCL,EAAOO,MAAM0K,WAAWxH,EAAO4Y,aAC1B5Y,EAAO4Y,YAAY5Y,EAAQI,EAAUxD,GAE1CwD,GAAYA,EAASS,eAAe,QAC/BT,EAASlD,KAEXkD,GAgBTwR,QAAS,SAAiB5R,EAAQQ,EAAI5D,GACpC,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAU1F,QAAQ1S,KAAKrC,EAAMmD,EAAQQ,EAAI5D,IAgBlDmV,WAAY,SAAoB/R,EAAQ8Q,EAAOlU,GAC7C,GAAIC,GAAOP,IAQX,OAPAwU,KAAUA,MACVlU,IAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BL,EAAOO,MAAMuE,UAAUzE,EAAK6B,OAAQqS,GACpClU,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUvF,WAAW7S,KAAKrC,EAAMmD,EAAQ8Q,EAAOlU,IAWxDsc,MAAO,WACL,GAAIhD,QAAS,CACX,GAAIC,IAEHA,EAAWD,SAAkC,kBAAlBA,SAAQgD,MAAuB,QAAU,OAAO/X,MAAMgV,EAAUtY,aAkBhGwZ,MAAO,SAAU8B,GACf,QAAS9B,GAAM+B,EAAIC,GACjB,MAAOF,GAAOhY,MAAM7E,KAAMuB,WAO5B,MAJAwZ,GAAMpY,SAAW,WACf,MAAOka,GAAOla,YAGToY,GACP,SAAUlX,EAAQvD,GAClB,GAAI0c,IACFlY,OAAQjB,EAAOiB,OAEfoD,QAAS,GAAI+U,SAAQpZ,EAAOqE,SAO9B,OAJIrE,GAAOjD,OACToc,EAAcE,KAAOjd,EAAOO,MAAMuC,OAAOc,EAAOjD,OAG3Cma,MAAM,GAAIoC,SAAQlb,EAAS4B,EAAO3B,IAAK2B,EAAO1B,QAAS6a,IAAgB/X,KAAK,SAAUnB,GAK3F,MAJAA,GAASD,QACPiB,OAAQjB,EAAOiB,OACf5C,IAAK2B,EAAO3B,KAEP4B,EAASsZ,OAAOnY,KAAK,SAAUrE,GAEpC,MADAkD,GAASlD,KAAOA,EACTkD,QAkBb+S,KAAM,SAAcnT,EAAQQ,EAAI5D,GAC9B,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUnE,KAAKjU,KAAKrC,EAAMmD,EAAQQ,EAAI5D,IAgB/C8V,QAAS,SAAiB1S,EAAQ8Q,EAAOlU,GACvC,GAAIC,GAAOP,IAQX,OAPAwU,KAAUA,MACVlU,IAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GACrCL,EAAOO,MAAMuE,UAAUzE,EAAK6B,OAAQqS,GACpClU,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GAEhD0a,EAAU5E,QAAQxT,KAAKrC,EAAMmD,EAAQ8Q,EAAOlU,IAcrD0b,IAAK,SAAa9Z,EAAK2B,EAAQvD,GAC7B,GAAIC,GAAOP,KACPc,EAAK,MAQT,OAPA+C,KAAWA,MACXvD,IAASA,MACTuD,EAAO3B,IAAMA,GAAO2B,EAAO3B,IAC3B2B,EAAOiB,OAASjB,EAAOiB,QAAU,MAGjChE,EAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAK2B,EAAQvD,IAAO2E,KAAK,SAAU0X,GAKtE,MAHA9Y,GAAS5D,EAAOO,MAAMoJ,YAAY+S,GAAW9Y,EAAS8Y,EACtD7b,EAAKR,EAAKQ,GAAK,MACfP,EAAKmR,IAAI5Q,EAAIoB,EAAK2B,EAAQvD,GACnBC,EAAK2E,KAAKrB,EAAQvD,KACxB2E,KAAK,SAAUnB,GAGhB,MADAhD,GAAKR,EAAKQ,GAAK,WACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAK2B,EAAQvD,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEhF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAc9DpQ,YAAa,SAAqBf,EAAQQ,EAAI5D,GAC5C,GAAIC,GAAOP,IACXM,KAASA,MACTA,EAAK6B,OAASlC,EAAOO,MAAMoJ,YAAYtJ,EAAK6B,WAAe7B,EAAK6B,MAChE,IAAIkb,GAAe3Z,EAAO2Z,iBACtB7Y,EAAWvE,EAAOO,MAAMoJ,YAAYtJ,EAAKkE,UAAYvE,EAAOO,MAAMoJ,YAAYlG,EAAOc,UAAYd,EAAOL,KAAOK,EAAOc,SAAWlE,EAAKkE,QA8C1I,OA5CA6Y,GAAa7a,QAAQ,SAAUqT,GAC7B,GAAiB,cAAbA,EAAIuB,MAAyBvB,EAAIyH,OAArC,CAGA,GAAInL,GAAO,OACPoL,EAAY1H,EAAIa,WAChB8G,EAAY3H,EAAII,cAChBwH,EAAWnd,EAAK6B,OAAOob,EAE3B,IAAIE,KAAa,IAAUF,IAAcC,EAIvC,MAHIC,MAAa,SACRnd,GAAK6B,OAAOob,IAEd,CAYP,UAVOjd,GAAK6B,OAAOob,GAEftd,EAAOO,MAAMsC,SAASoB,KACxBiO,EAAOjO,GAGLiO,IACFsL,EAAWA,GAAY5H,EAAIkE,cAAc5H,KAAU0D,EAAI0D,cAAcpH,GAAQlS,EAAOO,MAAMmY,IAAI9C,EAAI0D,cAAcpH,GAAOqL,EAAUlH,aAAe,OAG9ImH,EAAU,CACZ,GAAI7G,GAAO,iBACFtW,GAAKkE,QACZ,IAAIL,KAMJ,OALAlE,GAAOO,MAAM6B,OAAO/B,EAAM,SAAUU,EAAOsB,GACzC6B,EAAM7B,GAAOtB,IAEff,EAAOO,MAAMkd,EAAEvZ,EAAOqZ,GACtBhZ,EAAWnD,EAASd,EAAKkE,YAAY+Y,EAAWC,EAAUtZ,GAAQsZ,EAAUjZ,IAE1E/B,GAAG,KAIP,IAAgF,YAA3D,mBAATmU,GAAuB,YAAcpT,EAAaC,OAAOmT,IAAqB,MAAOA,GAAKnU,MAKrG+B,GAYTyX,QAAS,SAAiBnX,EAAQpB,EAAQQ,EAAI5D,GAC5C,GAAIC,GAAOP,IACXM,KAASA,KACT,IAAImB,IAAQxB,EAAOO,MAAMoJ,YAAYtJ,EAAKoE,UAAYzE,EAAOO,MAAMoJ,YAAYlG,EAAOgB,UAAYnE,EAAKmE,SAAWhB,EAAOgB,SAAWpE,EAAKoE,SAAUnE,EAAKkE,YAAYf,EAAQzD,EAAOO,MAAM8C,SAASY,IAAOjE,EAAOO,MAAMwK,SAAS9G,IAAkB,WAAXY,EAAsBZ,EAAK,KAAM5D,GAIvQ,OAHe,SAAXwE,GAAgC,WAAXA,GAAkC,YAAXA,GAC9CrD,EAAKuB,KAAKkB,GAEL7C,EAASwD,MAAM5E,EAAOO,MAAOiB,IAEtC+a,UAAW,SAAmBlc,GAE5B,MADAA,KAASA,MACLL,EAAOO,MAAMoJ,YAAYtJ,EAAK6B,WAG3BlC,EAAOO,MAAMmd,KAAKrd,EAAK6B,SAEhCsa,UAAW,SAAmB/Y,EAAQpD,GAEpC,MADAA,KAASA,MACLL,EAAOO,MAAMoJ,YAAYtJ,EAAK8a,QAC5Bnb,EAAOO,MAAMoJ,YAAYlG,EAAO0X,QAC3Bpb,KAAKob,OAEP1X,EAAO0X,OAET9a,EAAK8a,QAadlW,KAAM,SAAcrB,EAAQvD,GAqB1B,QAASsd,GAAYhd,GACnB,GAAIyK,GAAMwS,EAAMC,cAAgB,MAAQja,EAAOiB,OAAOgI,cAAgB,IAAMjJ,EAAO3B,IAAM,MAAQtB,EAAKgK,OAAS,MAAO,GAAI8F,OAAOqN,UAAYF,EAAME,WAAa,IAChK,OAAInd,GAAKgK,QAAU,KAAOhK,EAAKgK,OAAS,KAClCrK,EAAK+T,KACP/T,EAAKmR,IAAI,QAASrG,EAAKzK,GAElBA,IAEHL,EAAKqc,OACPrc,EAAKqc,MAAM,YAAevR,EAAKzK,GAE1BX,EAAOO,MAAMyD,OAAOrD,IA/B/B,GAAIL,GAAOP,KACP6d,EAAQ,GAAInN,KAChBpQ,KAASA,KACT,IAAI0d,GAAUna,EAAOjD,KACjBqd,EAAQpa,EAAOoa,MACf1T,EAAU1G,EAAO0G,OACrB1G,GAAS5D,EAAOO,MAAMmd,KAAK9Z,EAAQ,KAAM,KAAM,MAAO,OAAQ,QAAS,YACvEA,EAAS5D,EAAOO,MAAMuE,UAAUlB,EAAQtD,EAAK4a,YAC7CtX,EAAOjD,KAAOod,EACdna,EAAOoa,MAAQA,EACfpa,EAAO0G,QAAUA,EACbhK,EAAK0a,oBAA4D,MAAtCpX,EAAO3B,IAAI2B,EAAO3B,IAAIV,OAAS,KAC5DqC,EAAO3B,KAAO,KAEhB2B,EAAOiB,OAASjB,EAAOiB,OAAOgI,aAC9B,IAAIsO,GAASvX,EAAOuX,QAAU9a,EAAK8a,QAAU7a,EAAK6a,MAoBlD,IAnBIA,GAAUvX,EAAO3B,IAAImM,OAAOxK,EAAO3B,IAAIV,OAAS4Z,EAAO5Z,UAAY4Z,IACrEvX,EAAO3B,KAAOkZ,IAkBX7a,EAAK2a,KACR,KAAM,IAAIvX,OAAM,6DAGlB,OAAO1D,GAAOO,MAAMwE,QAAQzE,EAAKsb,WAAWhY,EAAQvD,IAAO2E,KAAK,SAAU0X,GAExE,MADA9Y,GAAS8Y,GAAW9Y,EAChBiX,IAAava,EAAK8a,UAAY/a,EAAK+a,WAAa9a,EAAK2a,MAChD3a,EAAKwa,MAAMlX,EAAQvD,GAAM2E,KAAK2Y,EAAaA,GAE7Crd,EAAK2a,KAAKrX,GAAQoB,KAAK2Y,EAAaA,GAAaM,MAAM,SAAUla,GACtE,MAAOzD,GAAKwD,cAAcC,EAAKH,EAAQvD,OAExC2E,KAAK,SAAUnB,GAChB,MAAO7D,GAAOO,MAAMwE,QAAQzE,EAAKib,UAAU3X,EAAQvD,EAAMwD,IAAWmB,KAAK,SAAU4P,GACjF,MAAOA,IAAa/Q,OAiB1BqY,KAAM,SAAcja,EAAKtB,EAAMiD,EAAQvD,GACrC,GAAIC,GAAOP,KACPc,EAAK,MAST,OARA+C,KAAWA,MACXvD,IAASA,MACTuD,EAAO3B,IAAMA,GAAO2B,EAAO3B,IAC3B2B,EAAOjD,KAAOA,GAAQiD,EAAOjD,KAC7BiD,EAAOiB,OAASjB,EAAOiB,QAAU,OAGjChE,EAAKR,EAAKQ,GAAK,aACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAKtB,EAAMiD,EAAQvD,IAAO2E,KAAK,SAAU0X,GAK5E,MAHA9Y,GAAS5D,EAAOO,MAAMoJ,YAAY+S,GAAW9Y,EAAS8Y,EACtD7b,EAAKR,EAAKQ,GAAK,OACfP,EAAKmR,IAAI5Q,EAAIoB,EAAKtB,EAAMiD,EAAQvD,GACzBC,EAAK2E,KAAKrB,EAAQvD,KACxB2E,KAAK,SAAUnB,GAGhB,MADAhD,GAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAKtB,EAAMiD,EAAQvD,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEtF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAiB9D0H,IAAK,SAAara,EAAKtB,EAAMiD,EAAQvD,GACnC,GAAIC,GAAOP,KACPc,EAAK,MAST,OARA+C,KAAWA,MACXvD,IAASA,MACTuD,EAAO3B,IAAMA,GAAO2B,EAAO3B,IAC3B2B,EAAOjD,KAAOA,GAAQiD,EAAOjD,KAC7BiD,EAAOiB,OAASjB,EAAOiB,QAAU;AAGjChE,EAAKR,EAAKQ,GAAK,YACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAKtB,EAAMiD,EAAQvD,IAAO2E,KAAK,SAAU0X,GAK5E,MAHA9Y,GAAS5D,EAAOO,MAAMoJ,YAAY+S,GAAW9Y,EAAS8Y,EACtD7b,EAAKR,EAAKQ,GAAK,MACfP,EAAKmR,IAAI5Q,EAAIoB,EAAKtB,EAAMiD,EAAQvD,GACzBC,EAAK2E,KAAKrB,EAAQvD,KACxB2E,KAAK,SAAUnB,GAGhB,MADAhD,GAAKR,EAAKQ,GAAK,WACRb,EAAOO,MAAMwE,QAAQzE,EAAKO,GAAIoB,EAAKtB,EAAMiD,EAAQvD,EAAMwD,IAAWmB,KAAK,SAAU4P,GAEtF,MAAO5U,GAAOO,MAAMoJ,YAAYiL,GAAa/Q,EAAW+Q,OAgB9D6H,eAAgB,SAAwBhZ,EAAQvB,EAAQ7B,GAEtD,MADAA,KAASA,MACLL,EAAOO,MAAM0K,WAAW5K,EAAKoc,gBACxBpc,EAAKoc,eAAehZ,EAAQvB,EAAQ7B,GAEzCL,EAAOO,MAAM0K,WAAWxH,EAAOgZ,gBAC1BhZ,EAAOgZ,eAAehZ,EAAQvB,EAAQ7B,GAExC6B,GAiBT4B,cAAe,SAAuBC,EAAKH,EAAQvD,GACjD,MAAOL,GAAOO,MAAMyD,OAAOD,IAc7BoY,UAAW,SAAmB1Y,EAAQ9C,EAAMN,GAE1C,MADAA,KAASA,MACLL,EAAOO,MAAM0K,WAAW5K,EAAK8b,WACxB9b,EAAK8b,UAAU1Y,EAAQ9C,EAAMN,GAElCL,EAAOO,MAAM0K,WAAWxH,EAAO0Y,WAC1B1Y,EAAO0Y,UAAU1Y,EAAQ9C,EAAMN,GAEjCM,GAiBToZ,IAAK,SAAatW,EAAQuW,EAAOzF,EAAOlU,GACtC,GAAIC,GAAOP,IAGX,IAFAwU,IAAUA,MACVlU,IAASA,OACJL,EAAOO,MAAMA,MAAM8C,SAAS2W,GAC/B,KAAM,IAAItW,OAAM,0BAQlB,OANArD,GAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAO6X,IAAMC,EAClB3Z,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GACrCL,EAAOO,MAAMuE,UAAUzE,EAAK6B,OAAQqS,GACpClU,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GAEhD0a,EAAUhB,IAAIpX,KAAKrC,EAAMmD,EAAQuW,EAAOzF,EAAOlU,IAexD8Z,OAAQ,SAAgB1W,EAAQQ,EAAImO,EAAO/R,GACzC,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUZ,OAAOxX,KAAKrC,EAAMmD,EAAQQ,EAAImO,EAAO/R,IAexDka,UAAW,SAAmB9W,EAAQ2O,EAAOmC,EAAOlU,GAClD,GAAIC,GAAOP,IAQX,OAPAwU,KAAUA,MACVlU,IAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BL,EAAOO,MAAMuE,UAAUzE,EAAK6B,OAAQqS,GACpClU,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUR,UAAU5X,KAAKrC,EAAMmD,EAAQ2O,EAAOmC,EAAOlU,IAqB9Dqa,WAAY,SAAoBjX,EAAQoS,EAASxV,GAC/C,GAAIC,GAAOP,IAMX,OALAM,KAASA,MACTA,EAAK6B,OAAS5B,EAAKic,UAAUlc,GAC7BA,EAAK6B,OAAS5B,EAAKmc,eAAehZ,EAAQpD,EAAK6B,OAAQ7B,GACvDA,EAAK8a,OAAS7a,EAAKkc,UAAU/Y,EAAQpD,GAE9B0a,EAAUL,WAAW/X,KAAKrC,EAAMmD,EAAQoS,EAASxV,KAuK5D,IAAI6d,IACHC,KAAM,EACNC,KAAM,eACNC,MAAO,EACPC,MAAO,EACPnU,MAAO,EAgCR3K,GAAQyD,YAAcA,EACtBzD,EAAQ2D,UAAYA,EACpB3D,EAAQ0F,WAAaA,EACrB1F,EAAQ0e,QAAUA","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index abfa923..d6758ba 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,6 +1,6 @@ /*! * js-data-fetch -* @version 3.0.0-beta.6 - Homepage +* @version 3.0.0-beta.7 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -111,8 +111,14 @@ return final; }; - var withoutRelations = function withoutRelations(mapper, props) { - return jsData.utils.omit(props, mapper.relationFields || []); + var withoutRelations = function withoutRelations(mapper, props, opts) { + opts || (opts = {}); + opts.with || (opts.with = []); + var relationFields = mapper.relationFields || []; + var toStrip = relationFields.filter(function (value) { + return opts.with.indexOf(value) === -1; + }); + return jsData.utils.omit(props, toStrip); }; var DEFAULTS$1 = { @@ -751,7 +757,7 @@ return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'create'; self.dbg(op, mapper, props, opts); return jsData.utils.resolve(self._create(mapper, props, opts)); @@ -800,7 +806,7 @@ // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; props = props.map(function (record) { - return withoutRelations(mapper, record); + return withoutRelations(mapper, record, opts); }); op = opts.op = 'createMany'; self.dbg(op, mapper, props, opts); @@ -1503,7 +1509,7 @@ return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'update'; self.dbg(op, mapper, id, props, opts); return jsData.utils.resolve(self._update(mapper, id, props, opts)); @@ -1560,7 +1566,7 @@ return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook props = jsData.utils.isUndefined(_props) ? props : _props; - props = withoutRelations(mapper, props); + props = withoutRelations(mapper, props, opts); op = opts.op = 'updateAll'; self.dbg(op, mapper, props, query, opts); return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); @@ -1615,7 +1621,7 @@ // Allow for re-assignment from lifecycle hook records = jsData.utils.isUndefined(_records) ? records : _records; records = records.map(function (record) { - return withoutRelations(mapper, record); + return withoutRelations(mapper, record, opts); }); op = opts.op = 'updateMany'; self.dbg(op, mapper, records, opts); @@ -2882,8 +2888,8 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 6, - full: '3.0.0-beta.6', + beta: 7, + full: '3.0.0-beta.7', major: 3, minor: 0, patch: 0 diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 08589fb..de341ee 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-fetch.js","sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props) {\n return utils.omit(props, mapper.relationFields || [])\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","DEFAULTS"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-fetch.js","sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter(function (value) {\n return opts.with.indexOf(value) === -1\n })\n return utils.omit(props, toStrip)\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","DEFAULTS"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index ce12aee..2e22b0e 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.6 - Homepage +* @version 3.0.0-beta.7 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,g),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function i(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(i).join(t)}function a(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function s(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(u(n)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var r=this;e||(e={}),t.utils.fillIn(e,A),n.call(r,e)}function f(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":c.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var u=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var l=[i.basePath||o.basePath||u.basePath,u.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&l.push(r),l.push(n.pathname||e),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){f(t,e)(n)}),n}}var c={};c.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},c.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},c.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var p=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},h=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},y=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},v=function(e,n){return t.utils.omit(n,e.relationFields||[])},g={debug:!1,raw:!1};n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:h,afterCreate:h,afterCreateMany:h,afterDestroy:h,afterDestroyAll:h,afterFind:h,afterFindAll:h,afterSum:h,afterUpdate:h,afterUpdateAll:h,afterUpdateMany:h,beforeCount:p,beforeCreate:p,beforeCreateMany:p,beforeDestroy:p,beforeDestroyAll:p,beforeFind:p,beforeFindAll:p,beforeSum:p,beforeUpdate:p,beforeUpdateAll:p,beforeUpdateMany:p,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="count",o.dbg(a,e,n,i),t.utils.resolve(o._count(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,a);return d=o.respond(d,i),a=i.op="afterCount",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n),a=i.op="create",o.dbg(a,e,n,i),t.utils.resolve(o._create(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"create");return d.created=l?1:0,d=o.respond(d,i),a=i.op="afterCreate",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t)}),a=i.op="createMany",o.dbg(a,e,n,i),t.utils.resolve(o._createMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"createMany");return d.created=l.length,d=o.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var o=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroy",o.dbg(a,e,n,i),t.utils.resolve(o._destroy(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroy");return d=o.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroyAll",o.dbg(a,e,n,i),t.utils.resolve(o._destroyAll(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroyAll");return d=o.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:c.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},find:function(e,n,i){var o=this,a=void 0,u=void 0;return i||(i={}),i.with||(i.with=[]),u=i.op="beforeFind",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="find",o.dbg(u,e,n,i),t.utils.resolve(o._find(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new r(a,{},"find");return s.found=a?1:0,s=o.respond(s,i),u=i.op="afterFind",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,i){var o=this;i||(i={}),i.with||(i.with=[]);var a=[],u=void 0,s=i._activeWith;if(t.utils.isObject(s)){var l=s.query||{};s.replace?n=l:t.utils.deepFillIn(n,l)}return u=i.op="beforeFindAll",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="findAll",o.dbg(u,e,n,i),t.utils.resolve(o._findAll(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new r(a,{},"findAll");return s.found=a.length,s=o.respond(s,i),u=i.op="afterFindAll",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:y(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:c.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:c.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),y(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,i,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,i,o),t.utils.resolve(a._sum(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,u);return p=a.respond(p,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,o){var a=this;i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=v(e,i),u=o.op="update",a.dbg(u,e,n,i,o),t.utils.resolve(a._update(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,"update");return p.updated=f?1:0,p=a.respond(p,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,o){var a=this;n||(n={}),i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n),u=o.op="updateAll",a.dbg(u,e,n,i,o),t.utils.resolve(a._updateAll(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var p=new r(f,d,"updateAll");return p.updated=f.length,p=a.respond(p,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var o=this;n||(n=[]),i||(i={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=i.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t)}),a=i.op="updateMany",o.dbg(a,e,n,i),t.utils.resolve(o._updateMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"updateMany");return d.updated=l.length,d=o.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}});var m=void 0,b=!1;try{b=window&&window.fetch}catch(e){}var T=n.prototype,A={basePath:"",forceTrailingSlash:!1,http:m,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(n.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:n}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:h,afterGET:h,afterHTTP:h,afterPOST:h,afterPUT:h,beforeDEL:p,beforeGET:p,beforeHTTP:p,beforePOST:p,beforePUT:p,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(s(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],u=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,l=e.getRelation(),f=r.params[s];if(f===!1||!s||!l)return f===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(f=f||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),l.idAttribute):null)),f){var d=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,l),u=a(i.getEndpoint(l,f,e),f,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":c.typeof(d)))return d.v}}}),u},getPath:function(e,n,r,i){var o=this;i||(i={});var u=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(r),a.apply(t.utils,u)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var l=e.suffix||n.suffix||i.suffix;if(l&&e.url.substr(e.url.length-l.length)!==l&&(e.url+=l),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,b&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),T.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),T.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.updateMany.call(r,e,t,n)}});var P={beta:6,full:"3.0.0-beta.6",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=f,e.addActions=d,e.version=P}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,g),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function i(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(i).join(t)}function a(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function s(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(u(n)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var r=this;e||(e={}),t.utils.fillIn(e,A),n.call(r,e)}function f(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":c.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var u=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var l=[i.basePath||o.basePath||u.basePath,u.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&l.push(r),l.push(n.pathname||e),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){f(t,e)(n)}),n}}var c={};c.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},c.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},c.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var p=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},h=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},y=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},v=function(e,n,r){r||(r={}),r.with||(r.with=[]);var i=e.relationFields||[],o=i.filter(function(e){return-1===r.with.indexOf(e)});return t.utils.omit(n,o)},g={debug:!1,raw:!1};n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:h,afterCreate:h,afterCreateMany:h,afterDestroy:h,afterDestroyAll:h,afterFind:h,afterFindAll:h,afterSum:h,afterUpdate:h,afterUpdateAll:h,afterUpdateMany:h,beforeCount:p,beforeCreate:p,beforeCreateMany:p,beforeDestroy:p,beforeDestroyAll:p,beforeFind:p,beforeFindAll:p,beforeSum:p,beforeUpdate:p,beforeUpdateAll:p,beforeUpdateMany:p,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="count",o.dbg(a,e,n,i),t.utils.resolve(o._count(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,a);return d=o.respond(d,i),a=i.op="afterCount",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n,i),a=i.op="create",o.dbg(a,e,n,i),t.utils.resolve(o._create(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"create");return d.created=l?1:0,d=o.respond(d,i),a=i.op="afterCreate",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t,i)}),a=i.op="createMany",o.dbg(a,e,n,i),t.utils.resolve(o._createMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"createMany");return d.created=l.length,d=o.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var o=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroy",o.dbg(a,e,n,i),t.utils.resolve(o._destroy(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroy");return d=o.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroyAll",o.dbg(a,e,n,i),t.utils.resolve(o._destroyAll(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroyAll");return d=o.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:c.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},find:function(e,n,i){var o=this,a=void 0,u=void 0;return i||(i={}),i.with||(i.with=[]),u=i.op="beforeFind",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="find",o.dbg(u,e,n,i),t.utils.resolve(o._find(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new r(a,{},"find");return s.found=a?1:0,s=o.respond(s,i),u=i.op="afterFind",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,i){var o=this;i||(i={}),i.with||(i.with=[]);var a=[],u=void 0,s=i._activeWith;if(t.utils.isObject(s)){var l=s.query||{};s.replace?n=l:t.utils.deepFillIn(n,l)}return u=i.op="beforeFindAll",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="findAll",o.dbg(u,e,n,i),t.utils.resolve(o._findAll(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new r(a,{},"findAll");return s.found=a.length,s=o.respond(s,i),u=i.op="afterFindAll",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:y(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:c.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:c.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),y(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,i,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,i,o),t.utils.resolve(a._sum(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,u);return p=a.respond(p,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,o){var a=this;i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=v(e,i,o),u=o.op="update",a.dbg(u,e,n,i,o),t.utils.resolve(a._update(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,"update");return p.updated=f?1:0,p=a.respond(p,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,o){var a=this;n||(n={}),i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n,o),u=o.op="updateAll",a.dbg(u,e,n,i,o),t.utils.resolve(a._updateAll(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var p=new r(f,d,"updateAll");return p.updated=f.length,p=a.respond(p,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var o=this;n||(n=[]),i||(i={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=i.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t,i)}),a=i.op="updateMany",o.dbg(a,e,n,i),t.utils.resolve(o._updateMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"updateMany");return d.updated=l.length,d=o.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}});var m=void 0,b=!1;try{b=window&&window.fetch}catch(e){}var T=n.prototype,A={basePath:"",forceTrailingSlash:!1,http:m,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(n.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:n}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:h,afterGET:h,afterHTTP:h,afterPOST:h,afterPUT:h,beforeDEL:p,beforeGET:p,beforeHTTP:p,beforePOST:p,beforePUT:p,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(s(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],u=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,l=e.getRelation(),f=r.params[s];if(f===!1||!s||!l)return f===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(f=f||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),l.idAttribute):null)),f){var d=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,l),u=a(i.getEndpoint(l,f,e),f,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":c.typeof(d)))return d.v}}}),u},getPath:function(e,n,r,i){var o=this;i||(i={});var u=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(r),a.apply(t.utils,u)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var l=e.suffix||n.suffix||i.suffix;if(l&&e.url.substr(e.url.length-l.length)!==l&&(e.url+=l),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,b&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),T.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),T.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.updateMany.call(r,e,t,n)}});var P={beta:7,full:"3.0.0-beta.7",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=f,e.addActions=d,e.version=P}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index 587364a..4b5909d 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","omit","relationFields","debug","raw","extend","addHiddenPropsToTarget","prototype","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","isUndefined","create","_props","_create","_results2","created","createMany","map","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","with","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","toUpperCase","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","axios","hasFetch","fetch","e","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","isFunction","error","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","logResponse","str","start","toUTCString","status","Date","getTime","payload","cache","timeout","substr","catch","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","addHiddenPropsToTarget","prototype","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","isUndefined","create","_props","_create","_results2","created","createMany","map","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","toUpperCase","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","axios","hasFetch","fetch","e","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","isFunction","error","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","logResponse","str","start","toUTCString","status","Date","getTime","payload","cache","timeout","substr","catch","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 57ad3fc..1c89ae9 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1251,8 +1251,8 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - beta: 6, - full: '3.0.0-beta.6', + beta: 7, + full: '3.0.0-beta.7', major: 3, minor: 0, patch: 0 From 8ae9828060b19937aa3eab4315b802496156c645 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Fri, 8 Jul 2016 01:13:07 -0700 Subject: [PATCH 06/10] 3.0.0-beta.8 --- dist/js-data-http.js | 1088 +++++++++++++--------------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 835 +++++++++------------ fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 407 +++++------ node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 1023 insertions(+), 1327 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index e3f16e4..a537a72 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-beta.7 - Homepage +* @version 3.0.0-beta.8 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -12,74 +12,14 @@ (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); }(this, function (exports,jsData) { 'use strict'; - var __commonjs_global = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : this; - function __commonjs(fn, module) { return module = { exports: {} }, fn(module, module.exports, __commonjs_global), module.exports; } + 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 babelHelpers = {}; - babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; - - babelHelpers.defineProperty = function (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; - }; - - babelHelpers.slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (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"); - } - }; - }(); - - babelHelpers; - - var axios = __commonjs(function (module, exports, global) { - /* axios v0.11.1 | (c) 2016 by Matt Zabriskie */ + var axios = createCommonjsModule(function (module, exports) { + /* axios v0.12.0 | (c) 2016 by Matt Zabriskie */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -89,7 +29,7 @@ exports["axios"] = factory(); else root["axios"] = factory(); - })(__commonjs_global, function() { + })(commonjsGlobal, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; @@ -146,12 +86,12 @@ var defaults = __webpack_require__(2); var utils = __webpack_require__(3); - var dispatchRequest = __webpack_require__(4); - var InterceptorManager = __webpack_require__(13); - var isAbsoluteURL = __webpack_require__(14); - var combineURLs = __webpack_require__(15); - var bind = __webpack_require__(16); - var transformData = __webpack_require__(8); + var dispatchRequest = __webpack_require__(5); + var InterceptorManager = __webpack_require__(14); + var isAbsoluteURL = __webpack_require__(15); + var combineURLs = __webpack_require__(16); + var bind = __webpack_require__(17); + var transformData = __webpack_require__(9); function Axios(defaultConfig) { this.defaults = utils.merge({}, defaultConfig); @@ -222,7 +162,10 @@ var defaultInstance = new Axios(defaults); var axios = module.exports = bind(Axios.prototype.request, defaultInstance); - module.exports.Axios = Axios; + axios.request = bind(Axios.prototype.request, defaultInstance); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios; // Expose properties from defaultInstance axios.defaults = defaultInstance.defaults; @@ -237,7 +180,7 @@ axios.all = function all(promises) { return Promise.all(promises); }; - axios.spread = __webpack_require__(17); + axios.spread = __webpack_require__(18); // Provide aliases for supported request methods utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { @@ -271,33 +214,39 @@ 'use strict'; var utils = __webpack_require__(3); + var normalizeHeaderName = __webpack_require__(4); var PROTECTION_PREFIX = /^\)\]\}',?\n/; var DEFAULT_CONTENT_TYPE = { 'Content-Type': 'application/x-www-form-urlencoded' }; + function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } + } + module.exports = { transformRequest: [function transformRequest(data, headers) { - if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) { + normalizeHeaderName(headers, 'Content-Type'); + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { return data; } if (utils.isArrayBufferView(data)) { return data.buffer; } - if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) { - // Set application/json if no Content-Type has been specified - if (!utils.isUndefined(headers)) { - utils.forEach(headers, function processContentTypeHeader(val, key) { - if (key.toLowerCase() === 'content-type') { - headers['Content-Type'] = val; - } - }); - - if (utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = 'application/json;charset=utf-8'; - } - } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + if (utils.isObject(data)) { + setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); return JSON.stringify(data); } return data; @@ -484,6 +433,16 @@ return isObject(val) && isFunction(val.pipe); } + /** + * Determine if a value is a URLSearchParams object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + function isURLSearchParams(val) { + return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; + } + /** * Trim excess whitespace off the beginning and end of a string * @@ -601,6 +560,7 @@ isBlob: isBlob, isFunction: isFunction, isStream: isStream, + isURLSearchParams: isURLSearchParams, isStandardBrowserEnv: isStandardBrowserEnv, forEach: forEach, merge: merge, @@ -614,6 +574,24 @@ 'use strict'; + var utils = __webpack_require__(3); + + module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); + }; + + + /***/ }, + /* 5 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + /** * Dispatch a request to the server using whichever adapter * is supported by the current environment. @@ -631,10 +609,10 @@ adapter = config.adapter; } else if (typeof XMLHttpRequest !== 'undefined') { // For browsers use XHR adapter - adapter = __webpack_require__(5); + adapter = __webpack_require__(6); } else if (typeof process !== 'undefined') { // For node use HTTP adapter - adapter = __webpack_require__(5); + adapter = __webpack_require__(6); } if (typeof adapter === 'function') { @@ -649,18 +627,18 @@ /***/ }, - /* 5 */ + /* 6 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var utils = __webpack_require__(3); - var buildURL = __webpack_require__(6); - var parseHeaders = __webpack_require__(7); - var transformData = __webpack_require__(8); - var isURLSameOrigin = __webpack_require__(9); - var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10); - var settle = __webpack_require__(11); + var buildURL = __webpack_require__(7); + var parseHeaders = __webpack_require__(8); + var transformData = __webpack_require__(9); + var isURLSameOrigin = __webpack_require__(10); + var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(11); + var settle = __webpack_require__(12); module.exports = function xhrAdapter(resolve, reject, config) { var requestData = config.data; @@ -757,7 +735,7 @@ // This is only done if running in a standard browser environment. // Specifically not if we're in a web worker, or react-native. if (utils.isStandardBrowserEnv()) { - var cookies = __webpack_require__(12); + var cookies = __webpack_require__(13); // Add xsrf header var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? @@ -817,7 +795,7 @@ /***/ }, - /* 6 */ + /* 7 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -851,6 +829,8 @@ var serializedParams; if (paramsSerializer) { serializedParams = paramsSerializer(params); + } else if (utils.isURLSearchParams(params)) { + serializedParams = params.toString(); } else { var parts = []; @@ -886,11 +866,10 @@ return url; }; - /***/ }, - /* 7 */ + /* 8 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -933,7 +912,7 @@ /***/ }, - /* 8 */ + /* 9 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -959,7 +938,7 @@ /***/ }, - /* 9 */ + /* 10 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1033,7 +1012,7 @@ /***/ }, - /* 10 */ + /* 11 */ /***/ function(module, exports) { 'use strict'; @@ -1075,7 +1054,7 @@ /***/ }, - /* 11 */ + /* 12 */ /***/ function(module, exports) { 'use strict'; @@ -1099,7 +1078,7 @@ /***/ }, - /* 12 */ + /* 13 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1158,7 +1137,7 @@ /***/ }, - /* 13 */ + /* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1216,7 +1195,7 @@ /***/ }, - /* 14 */ + /* 15 */ /***/ function(module, exports) { 'use strict'; @@ -1236,7 +1215,7 @@ /***/ }, - /* 15 */ + /* 16 */ /***/ function(module, exports) { 'use strict'; @@ -1254,7 +1233,7 @@ /***/ }, - /* 16 */ + /* 17 */ /***/ function(module, exports) { 'use strict'; @@ -1271,7 +1250,7 @@ /***/ }, - /* 17 */ + /* 18 */ /***/ function(module, exports) { 'use strict'; @@ -1311,27 +1290,82 @@ var axios$1 = (axios && typeof axios === 'object' && 'default' in axios ? axios['default'] : axios); - var noop = function noop() { - var self = this; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + var defineProperty = function (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; + }; + + var slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (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"); + } + }; + }(); + var noop = function noop() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var opts = args[args.length - 1]; - self.dbg.apply(self, [opts.op].concat(args)); + this.dbg.apply(this, [opts.op].concat(args)); return jsData.utils.resolve(); }; var noop2 = function noop2() { - var self = this; - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var opts = args[args.length - 2]; - self.dbg.apply(self, [opts.op].concat(args)); + this.dbg.apply(this, [opts.op].concat(args)); return jsData.utils.resolve(); }; @@ -1358,6 +1392,34 @@ return jsData.utils.omit(props, toStrip); }; + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + this.data = data; + + jsData.utils.fillIn(this, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + this.op = op; + } + var DEFAULTS$1 = { /** * Whether to log debugging information. @@ -1383,61 +1445,23 @@ * * @class Adapter * @abstract + * @extends Component * @param {Object} [opts] Configuration opts. * @param {boolean} [opts.debug=false] Whether to log debugging information. * @param {boolean} [opts.raw=false] Whether to return a more detailed response * object. */ function Adapter(opts) { - var self = this; + jsData.utils.classCallCheck(this, Adapter); + jsData.Component.call(this); opts || (opts = {}); jsData.utils.fillIn(opts, DEFAULTS$1); - jsData.utils.fillIn(self, opts); + jsData.utils.fillIn(this, opts); } - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - var self = this; - meta || (meta = {}); + jsData.Component.extend({ + constructor: Adapter, - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - self.data = data; - - jsData.utils.fillIn(self, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - self.op = op; - } - - /** - * Alternative to ES6 class syntax for extending `Adapter`. - * - * @name Adapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `Adapter`. - */ - Adapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { /** * Lifecycle method method called by count. * @@ -1904,21 +1928,6 @@ */ beforeUpdateMany: noop, - /** - * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. - * - * @name Adapter#dbg - * @method - */ - dbg: function dbg() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['debug'].concat(args)); - }, - - /** * Retrieve the number of records that match the selection query. Called by * `Mapper#count`. @@ -1939,33 +1948,33 @@ * @return {Promise} */ count: function count(mapper, query, opts) { - var self = this; + var _this = this; + var op = void 0; query || (query = {}); opts || (opts = {}); // beforeCount lifecycle hook op = opts.op = 'beforeCount'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { // Allow for re-assignment from lifecycle hook op = opts.op = 'count'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._count(mapper, query, opts)); + _this.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this._count(mapper, query, opts)); }).then(function (results) { - var _results = babelHelpers.slicedToArray(results, 2); + var _results = slicedToArray(results, 2); var data = _results[0]; var result = _results[1]; result || (result = {}); var response = new Response(data, result, op); - response = self.respond(response, opts); + response = _this.respond(response, opts); // afterCount lifecycle hook op = opts.op = 'afterCount'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1984,22 +1993,23 @@ * @return {Promise} */ create: function create(mapper, props, opts) { - var self = this; + var _this2 = this; + var op = void 0; props || (props = {}); opts || (opts = {}); // beforeCreate lifecycle hook op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'create'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._create(mapper, props, opts)); + _this2.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this2._create(mapper, props, opts)); }).then(function (results) { - var _results2 = babelHelpers.slicedToArray(results, 2); + var _results2 = slicedToArray(results, 2); var data = _results2[0]; var result = _results2[1]; @@ -2007,13 +2017,12 @@ result || (result = {}); var response = new Response(data, result, 'create'); response.created = data ? 1 : 0; - response = self.respond(response, opts); + response = _this2.respond(response, opts); // afterCreate lifecycle hook op = opts.op = 'afterCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2032,24 +2041,25 @@ * @return {Promise} */ createMany: function createMany(mapper, props, opts) { - var self = this; + var _this3 = this; + var op = void 0; props || (props = {}); opts || (opts = {}); // beforeCreateMany lifecycle hook op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = props.map(function (record) { return withoutRelations(mapper, record, opts); }); op = opts.op = 'createMany'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._createMany(mapper, props, opts)); + _this3.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); }).then(function (results) { - var _results3 = babelHelpers.slicedToArray(results, 2); + var _results3 = slicedToArray(results, 2); var data = _results3[0]; var result = _results3[1]; @@ -2058,13 +2068,12 @@ result || (result = {}); var response = new Response(data, result, 'createMany'); response.created = data.length; - response = self.respond(response, opts); + response = _this3.respond(response, opts); // afterCreateMany lifecycle hook op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2084,31 +2093,31 @@ * @return {Promise} */ destroy: function destroy(mapper, id, opts) { - var self = this; + var _this4 = this; + var op = void 0; opts || (opts = {}); // beforeDestroy lifecycle hook op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { op = opts.op = 'destroy'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._destroy(mapper, id, opts)); + _this4.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); }).then(function (results) { - var _results4 = babelHelpers.slicedToArray(results, 2); + var _results4 = slicedToArray(results, 2); var data = _results4[0]; var result = _results4[1]; result || (result = {}); var response = new Response(data, result, 'destroy'); - response = self.respond(response, opts); + response = _this4.respond(response, opts); // afterDestroy lifecycle hook op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2134,32 +2143,32 @@ * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { - var self = this; + var _this5 = this; + var op = void 0; query || (query = {}); opts || (opts = {}); // beforeDestroyAll lifecycle hook op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { op = opts.op = 'destroyAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + _this5.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); }).then(function (results) { - var _results5 = babelHelpers.slicedToArray(results, 2); + var _results5 = slicedToArray(results, 2); var data = _results5[0]; var result = _results5[1]; result || (result = {}); var response = new Response(data, result, 'destroyAll'); - response = self.respond(response, opts); + response = _this5.respond(response, opts); // afterDestroyAll lifecycle hook op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2175,28 +2184,29 @@ * @return {Promise} */ loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var self = this; + var _this6 = this; + var relationDef = def.getRelation(); if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { var _ret = function () { var record = records; return { - v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + v: _this6.find(relationDef, _this6.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { def.setLocalField(record, relatedItem); }) }; }(); - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } else { var keys = records.map(function (record) { - return self.makeBelongsToForeignKey(mapper, def, record); + return _this6.makeBelongsToForeignKey(mapper, def, record); }).filter(function (key) { return key; }); - return self.findAll(relationDef, { - where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + return this.findAll(relationDef, { + where: defineProperty({}, relationDef.idAttribute, { 'in': keys }) }, __opts).then(function (relatedItems) { @@ -2226,7 +2236,8 @@ * @return {Promise} */ find: function find(mapper, id, opts) { - var self = this; + var _this7 = this; + var record = void 0, op = void 0; opts || (opts = {}); @@ -2234,12 +2245,12 @@ // beforeFind lifecycle hook op = opts.op = 'beforeFind'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { op = opts.op = 'find'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._find(mapper, id, opts)); + _this7.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this7._find(mapper, id, opts)); }).then(function (results) { - var _results6 = babelHelpers.slicedToArray(results, 1); + var _results6 = slicedToArray(results, 1); var _record = _results6[0]; @@ -2253,33 +2264,32 @@ var task = void 0; if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { if (def.type === 'hasOne') { - task = self.loadHasOne(mapper, def, record, __opts); + task = _this7.loadHasOne(mapper, def, record, __opts); } else { - task = self.loadHasMany(mapper, def, record, __opts); + task = _this7.loadHasMany(mapper, def, record, __opts); } } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + task = _this7.loadHasManyLocalKeys(mapper, def, record, __opts); } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + task = _this7.loadHasManyForeignKeys(mapper, def, record, __opts); } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, record, __opts); + task = _this7.loadBelongsTo(mapper, def, record, __opts); } if (task) { tasks.push(task); } }); - return Promise.all(tasks); + return jsData.utils.Promise.all(tasks); }).then(function () { var response = new Response(record, {}, 'find'); response.found = record ? 1 : 0; - response = self.respond(response, opts); + response = _this7.respond(response, opts); // afterFind lifecycle hook op = opts.op = 'afterFind'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2305,7 +2315,8 @@ * @return {Promise} */ findAll: function findAll(mapper, query, opts) { - var self = this; + var _this8 = this; + opts || (opts = {}); opts.with || (opts.with = []); @@ -2324,12 +2335,12 @@ // beforeFindAll lifecycle hook op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { op = opts.op = 'findAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._findAll(mapper, query, opts)); + _this8.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); }).then(function (results) { - var _results7 = babelHelpers.slicedToArray(results, 1); + var _results7 = slicedToArray(results, 1); var _records = _results7[0]; @@ -2340,32 +2351,31 @@ var task = void 0; if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { if (def.type === 'hasMany') { - task = self.loadHasMany(mapper, def, records, __opts); + task = _this8.loadHasMany(mapper, def, records, __opts); } else { - task = self.loadHasOne(mapper, def, records, __opts); + task = _this8.loadHasOne(mapper, def, records, __opts); } } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + task = _this8.loadHasManyLocalKeys(mapper, def, records, __opts); } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + task = _this8.loadHasManyForeignKeys(mapper, def, records, __opts); } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, records, __opts); + task = _this8.loadBelongsTo(mapper, def, records, __opts); } if (task) { tasks.push(task); } }); - return Promise.all(tasks); + return jsData.utils.Promise.all(tasks); }).then(function () { var response = new Response(records, {}, 'findAll'); response.found = records.length; - response = self.respond(response, opts); + response = _this8.respond(response, opts); // afterFindAll lifecycle hook op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2383,7 +2393,7 @@ */ getOpt: function getOpt(opt, opts) { opts || (opts = {}); - return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); }, @@ -2397,7 +2407,8 @@ * @return {Promise} */ loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var self = this; + var _this9 = this; + var singular = false; if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { @@ -2405,7 +2416,7 @@ records = [records]; } var IDs = records.map(function (record) { - return self.makeHasManyForeignKey(mapper, def, record); + return _this9.makeHasManyForeignKey(mapper, def, record); }); var query = { where: {} @@ -2419,7 +2430,7 @@ return id; }); } - return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { records.forEach(function (record) { var attached = []; // avoid unneccesary iteration when we only have one record @@ -2437,7 +2448,8 @@ }); }, loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var self = this; + var _this10 = this; + var record = void 0; var relatedMapper = def.getRelation(); @@ -2446,9 +2458,9 @@ } if (record) { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': self.makeHasManyLocalKeys(mapper, def, record) + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': this.makeHasManyLocalKeys(mapper, def, record) }) }, __opts).then(function (relatedItems) { def.setLocalField(record, relatedItems); @@ -2457,11 +2469,11 @@ var _ret2 = function () { var localKeys = []; records.forEach(function (record) { - localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + localKeys = localKeys.concat(_this10.makeHasManyLocalKeys(mapper, def, record)); }); return { - v: self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + v: _this10.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { 'in': unique(localKeys).filter(function (x) { return x; }) @@ -2483,11 +2495,12 @@ }; }(); - if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; } }, loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var self = this; + var _this11 = this; + var relatedMapper = def.getRelation(); var idAttribute = mapper.idAttribute; var record = void 0; @@ -2497,18 +2510,18 @@ } if (record) { - return self.findAll(def.getRelation(), { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'contains': self.makeHasManyForeignKeys(mapper, def, record) + return this.findAll(def.getRelation(), { + where: defineProperty({}, def.foreignKeys, { + 'contains': this.makeHasManyForeignKeys(mapper, def, record) }) }, __opts).then(function (relatedItems) { def.setLocalField(record, relatedItems); }); } else { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, def.foreignKeys, { + return this.findAll(relatedMapper, { + where: defineProperty({}, def.foreignKeys, { 'isectNotEmpty': records.map(function (record) { - return self.makeHasManyForeignKeys(mapper, def, record); + return _this11.makeHasManyForeignKeys(mapper, def, record); }) }) }, __opts).then(function (relatedItems) { @@ -2553,40 +2566,6 @@ }, - /** - * Logging utility method. Override this method if you want to send log - * messages to something other than the console. - * - * @name Adapter#log - * @method - * @param {string} level Log level. - * @param {...*} values Values to log. - */ - log: function log(level) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - if (level && !args.length) { - args.push(level); - level = 'debug'; - } - if (level === 'debug' && !this.debug) { - return; - } - var prefix = level.toUpperCase() + ': (Adapter)'; - if (console[level]) { - var _console; - - (_console = console)[level].apply(_console, [prefix].concat(args)); - } else { - var _console2; - - (_console2 = console).log.apply(_console2, [prefix].concat(args)); - } - }, - - /** * Return the foreignKey from the given record for the provided relationship. * @@ -2673,7 +2652,8 @@ * @return {Promise} */ sum: function sum(mapper, field, query, opts) { - var self = this; + var _this12 = this; + var op = void 0; if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); @@ -2683,26 +2663,25 @@ // beforeSum lifecycle hook op = opts.op = 'beforeSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { // Allow for re-assignment from lifecycle hook op = opts.op = 'sum'; - self.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + _this12.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(_this12._sum(mapper, field, query, opts)); }).then(function (results) { - var _results8 = babelHelpers.slicedToArray(results, 2); + var _results8 = slicedToArray(results, 2); var data = _results8[0]; var result = _results8[1]; result || (result = {}); var response = new Response(data, result, op); - response = self.respond(response, opts); + response = _this12.respond(response, opts); // afterSum lifecycle hook op = opts.op = 'afterSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this12[op](mapper, field, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2736,22 +2715,23 @@ * @return {Promise} */ update: function update(mapper, id, props, opts) { - var self = this; + var _this13 = this; + props || (props = {}); opts || (opts = {}); var op = void 0; // beforeUpdate lifecycle hook op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'update'; - self.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(self._update(mapper, id, props, opts)); + _this13.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(_this13._update(mapper, id, props, opts)); }).then(function (results) { - var _results9 = babelHelpers.slicedToArray(results, 2); + var _results9 = slicedToArray(results, 2); var data = _results9[0]; var result = _results9[1]; @@ -2759,13 +2739,12 @@ result || (result = {}); var response = new Response(data, result, 'update'); response.updated = data ? 1 : 0; - response = self.respond(response, opts); + response = _this13.respond(response, opts); // afterUpdate lifecycle hook op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this13[op](mapper, id, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2792,7 +2771,8 @@ * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { - var self = this; + var _this14 = this; + props || (props = {}); query || (query = {}); opts || (opts = {}); @@ -2800,15 +2780,15 @@ // beforeUpdateAll lifecycle hook op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'updateAll'; - self.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + _this14.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(_this14._updateAll(mapper, props, query, opts)); }).then(function (results) { - var _results10 = babelHelpers.slicedToArray(results, 2); + var _results10 = slicedToArray(results, 2); var data = _results10[0]; var result = _results10[1]; @@ -2817,13 +2797,12 @@ result || (result = {}); var response = new Response(data, result, 'updateAll'); response.updated = data.length; - response = self.respond(response, opts); + response = _this14.respond(response, opts); // afterUpdateAll lifecycle hook op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this14[op](mapper, props, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2842,7 +2821,8 @@ * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { - var self = this; + var _this15 = this; + records || (records = []); opts || (opts = {}); var op = void 0; @@ -2854,17 +2834,17 @@ // beforeUpdateMany lifecycle hook op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { // Allow for re-assignment from lifecycle hook - records = jsData.utils.isUndefined(_records) ? records : _records; + records = _records === undefined ? records : _records; records = records.map(function (record) { return withoutRelations(mapper, record, opts); }); op = opts.op = 'updateMany'; - self.dbg(op, mapper, records, opts); - return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + _this15.dbg(op, mapper, records, opts); + return jsData.utils.resolve(_this15._updateMany(mapper, records, opts)); }).then(function (results) { - var _results11 = babelHelpers.slicedToArray(results, 2); + var _results11 = slicedToArray(results, 2); var data = _results11[0]; var result = _results11[1]; @@ -2873,13 +2853,12 @@ result || (result = {}); var response = new Response(data, result, 'updateMany'); response.updated = data.length; - response = self.respond(response, opts); + response = _this15.respond(response, opts); // afterUpdateMany lifecycle hook op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this15[op](mapper, records, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); } @@ -2943,8 +2922,6 @@ return url; } - var __super__ = Adapter.prototype; - var DEFAULTS = { // Default and user-defined settings /** @@ -3001,10 +2978,12 @@ * @param {boolean} [opts.useFetch=false] TODO */ function HttpAdapter(opts) { - var self = this; + jsData.utils.classCallCheck(this, HttpAdapter); + opts || (opts = {}); + // Fill in any missing options with the defaults jsData.utils.fillIn(opts, DEFAULTS); - Adapter.call(self, opts); + Adapter.call(this, opts); } /** @@ -3012,46 +2991,9 @@ * @see HttpAdapter */ - // Setup prototype inheritance from Adapter - HttpAdapter.prototype = Object.create(Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } - }); - - Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: Adapter - }); - - /** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() - * - * @name HttpAdapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. - */ - HttpAdapter.extend = jsData.utils.extend; + Adapter.extend({ + constructor: HttpAdapter, - jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { /** * @name HttpAdapter#afterDEL * @method @@ -3150,72 +3092,83 @@ beforePUT: noop, _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this = this; + + return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return _this._end(mapper, opts, response); }); }, _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this2 = this; + + return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this2._end(mapper, opts, response); }); }, _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this3 = this; + + return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this3._end(mapper, opts, response); }); }, _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this4 = this; + + return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return _this4._end(mapper, opts, response); }); }, _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this5 = this; + + return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return _this5._end(mapper, opts, response); }); }, _end: function _end(mapper, opts, response) { return [this.deserialize(mapper, response, opts), response]; }, _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this6 = this; + + return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { + return _this6._end(mapper, opts, response); }); }, _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this7 = this; + + return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return _this7._end(mapper, opts, response); }); }, _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this8 = this; + + return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return _this8._end(mapper, opts, response); }); }, _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this9 = this; + + return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this9._end(mapper, opts, response); }); }, _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this10 = this; + + return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this10._end(mapper, opts, response); }); }, _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this11 = this; + + return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { + return _this11._end(mapper, opts, response); }); }, @@ -3233,16 +3186,14 @@ * @return {Promise} */ count: function count(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.count.call(this, mapper, query, opts); }, @@ -3259,13 +3210,11 @@ * @return {Promise} */ create: function create(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.create.call(this, mapper, props, opts); }, @@ -3282,13 +3231,11 @@ * @return {Promise} */ createMany: function createMany(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.createMany.call(this, mapper, props, opts); }, @@ -3304,7 +3251,8 @@ * @return {Promise} */ DEL: function DEL(url, config, opts) { - var self = this; + var _this12 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -3313,18 +3261,17 @@ // beforeDEL lifecycle hook op = opts.op = 'beforeDEL'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this12.dbg(op, url, config, opts); + return _this12.HTTP(config, opts); }).then(function (response) { // afterDEL lifecycle hook op = opts.op = 'afterDEL'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -3369,13 +3316,11 @@ * @return {Promise} */ destroy: function destroy(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroy.call(this, mapper, id, opts); }, @@ -3392,15 +3337,13 @@ * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroyAll.call(this, mapper, query, opts); }, @@ -3480,13 +3423,11 @@ * @return {Promise} */ find: function find(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.find.call(this, mapper, id, opts); }, @@ -3503,15 +3444,13 @@ * @return {Promise} */ findAll: function findAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); + opts.params = this.getParams(opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.findAll.call(this, mapper, query, opts); }, @@ -3526,7 +3465,8 @@ * @return {Promise} */ GET: function GET(url, config, opts) { - var self = this; + var _this13 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -3535,18 +3475,17 @@ // beforeGET lifecycle hook op = opts.op = 'beforeGET'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this13.dbg(op, url, config, opts); + return _this13.HTTP(config, opts); }).then(function (response) { // afterGET lifecycle hook op = opts.op = 'afterGET'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -3561,7 +3500,8 @@ * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var self = this; + var _this14 = this; + opts || (opts = {}); opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; var relationList = mapper.relationList || []; @@ -3600,13 +3540,13 @@ _opts[key] = value; }); jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); return { v: false }; }(); - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } } }); @@ -3624,9 +3564,8 @@ * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { - var self = this; opts || (opts = {}); - var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; if (method === 'find' || method === 'update' || method === 'destroy') { args.push(id); } @@ -3634,15 +3573,15 @@ }, getParams: function getParams(opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.params)) { + if (opts.params === undefined) { return {}; } return jsData.utils.copy(opts.params); }, getSuffix: function getSuffix(mapper, opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.suffix)) { - if (jsData.utils.isUndefined(mapper.suffix)) { + if (opts.suffix === undefined) { + if (mapper.suffix === undefined) { return this.suffix; } return mapper.suffix; @@ -3661,56 +3600,57 @@ * @return {Promise} */ HTTP: function HTTP(config, opts) { - var self = this; + var _this15 = this; + var start = new Date(); opts || (opts = {}); var payload = config.data; var cache = config.cache; var timeout = config.timeout; config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = jsData.utils.deepMixIn(config, self.httpConfig); + config = jsData.utils.deepMixIn(config, this.httpConfig); config.data = payload; config.cache = cache; config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { config.url += '/'; } config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; + var suffix = config.suffix || opts.suffix || this.suffix; if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { config.url += suffix; } - function logResponse(data) { + var logResponse = function logResponse(data) { var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); + if (_this15.log) { + _this15.dbg('debug', str, data); } return data; } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); + if (_this15.error) { + _this15.error('\'FAILED: ' + str, data); } return jsData.utils.reject(data); } - } + }; - if (!self.http) { + if (!this.http) { throw new Error('You have not configured this adapter with an http library!'); } - return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); + if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { + return _this15.fetch(config, opts).then(logResponse, logResponse); } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); + return _this15.http(config).then(logResponse, logResponse).catch(function (err) { + return _this15.responseError(err, config, opts); }); }).then(function (response) { - return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; + return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -3728,7 +3668,8 @@ * @return {Promise} */ POST: function POST(url, data, config, opts) { - var self = this; + var _this16 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -3738,18 +3679,17 @@ // beforePOST lifecycle hook op = opts.op = 'beforePOST'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this16.dbg(op, url, data, config, opts); + return _this16.HTTP(config, opts); }).then(function (response) { // afterPOST lifecycle hook op = opts.op = 'afterPOST'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -3767,7 +3707,8 @@ * @return {Promise} */ PUT: function PUT(url, data, config, opts) { - var self = this; + var _this17 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -3777,18 +3718,17 @@ // beforePUT lifecycle hook op = opts.op = 'beforePUT'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this17.dbg(op, url, data, config, opts); + return _this17.HTTP(config, opts); }).then(function (response) { // afterPUT lifecycle hook op = opts.op = 'afterPUT'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -3870,19 +3810,17 @@ * @return {Promise} */ sum: function sum(mapper, field, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); if (!jsData.utils.utils.isString(field)) { throw new Error('field must be a string!'); } - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.sum.call(this, mapper, field, query, opts); }, @@ -3898,13 +3836,11 @@ * @return {Promise} */ update: function update(mapper, id, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.update.call(this, mapper, id, props, opts); }, @@ -3920,15 +3856,13 @@ * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); }, @@ -3950,13 +3884,11 @@ * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateMany.call(this, mapper, records, opts); } }); @@ -4005,7 +3937,7 @@ */ function addAction(name, opts) { if (!name || !jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); } return function (mapper) { if (mapper[name]) { @@ -4021,21 +3953,22 @@ return jsData.utils.reject(err); }; mapper[name] = function (id, _opts) { - var self = this; + var _this18 = this; + if (jsData.utils.isObject(id)) { _opts = id; } _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); var config = {}; jsData.utils.fillIn(config, opts); if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { _opts.endpoint = config.endpoint; } if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); + config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } @@ -4043,13 +3976,13 @@ config.url = makePath.apply(null, args); } config.method = config.method || 'GET'; - config.mapper = self.name; + config.mapper = this.name; jsData.utils.deepMixIn(config, _opts); return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { - data.config.mapper = self.name; + data.config.mapper = _this18.name; } return data; }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); @@ -4124,46 +4057,19 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 7, - full: '3.0.0-beta.7', + beta: 8, + full: '3.0.0-beta.8', major: 3, minor: 0, patch: 0 }; - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() - * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() - * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * // ... - * }) - * - * @module js-data-http - */ - exports.HttpAdapter = HttpAdapter; exports.addAction = addAction; exports.addActions = addActions; exports.version = version; + Object.defineProperty(exports, '__esModule', { value: true }); + })); //# sourceMappingURL=js-data-http.js.map \ No newline at end of file diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 0d1087a..08154b3 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-http.js","sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.11.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(4);\n\tvar InterceptorManager = __webpack_require__(13);\n\tvar isAbsoluteURL = __webpack_require__(14);\n\tvar combineURLs = __webpack_require__(15);\n\tvar bind = __webpack_require__(16);\n\tvar transformData = __webpack_require__(8);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\tmodule.exports.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(17);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isStream(data)) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n\t // Set application/json if no Content-Type has been specified\n\t if (!utils.isUndefined(headers)) {\n\t utils.forEach(headers, function processContentTypeHeader(val, key) {\n\t if (key.toLowerCase() === 'content-type') {\n\t headers['Content-Type'] = val;\n\t }\n\t });\n\t\n\t if (utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = 'application/json;charset=utf-8';\n\t }\n\t }\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(5);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(5);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(6);\n\tvar parseHeaders = __webpack_require__(7);\n\tvar transformData = __webpack_require__(8);\n\tvar isURLSameOrigin = __webpack_require__(9);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(10);\n\tvar settle = __webpack_require__(11);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(12);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\t\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter(function (value) {\n return opts.with.indexOf(value) === -1\n })\n return utils.omit(props, toStrip)\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["this","utils","DEFAULTS","axios"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.12.0 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(5);\n\tvar InterceptorManager = __webpack_require__(14);\n\tvar isAbsoluteURL = __webpack_require__(15);\n\tvar combineURLs = __webpack_require__(16);\n\tvar bind = __webpack_require__(17);\n\tvar transformData = __webpack_require__(9);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\taxios.request = bind(Axios.prototype.request, defaultInstance);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(18);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar normalizeHeaderName = __webpack_require__(4);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(6);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(6);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(7);\n\tvar parseHeaders = __webpack_require__(8);\n\tvar transformData = __webpack_require__(9);\n\tvar isURLSameOrigin = __webpack_require__(10);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(11);\n\tvar settle = __webpack_require__(12);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(13);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index d9c7213..60f62f3 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.7 - Homepage +* @version 3.0.0-beta.8 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e,t){return t={exports:{}},e(t,t.exports,p),t.exports}function r(e){var n=this;e||(e={}),t.utils.fillIn(e,A),t.utils.fillIn(n,e)}function i(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function o(e){return null!=e&&""!==e}function a(e,t){return t||(t=""),e.filter(o).join(t)}function u(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=a(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function s(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function f(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(s(n)+"="+s(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var n=this;e||(e={}),t.utils.fillIn(e,E),r.call(n,e)}function c(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":h.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var a=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var f=[i.basePath||o.basePath||a.basePath,a.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&f.push(r),f.push(n.pathname||e),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){c(t,e)(n)}),n}}var p="undefined"!=typeof window?window:"undefined"!=typeof global?global:this,h={};h.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},h.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},h.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var y=n(function(e,t,n){!function(n,r){"object"==typeof t&&"object"==typeof e?e.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof t?t.axios=r():n.axios=r()}(p,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){function r(e){this.defaults=o.merge({},e),this.interceptors={request:new u,response:new u}}var i=n(2),o=n(3),a=n(4),u=n(13),s=n(14),f=n(15),l=n(16),c=n(8);r.prototype.request=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge(i,this.defaults,{method:"get"},e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=c(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var d=new r(i),p=e.exports=l(r.prototype.request,d);e.exports.Axios=r,p.defaults=d.defaults,p.interceptors=d.interceptors,p.create=function(e){return new r(e)},p.all=function(e){return Promise.all(e)},p.spread=n(17),o.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))},p[e]=l(r.prototype[e],d)}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))},p[e]=l(r.prototype[e],d)})},function(e,t,n){var r=n(3),i=/^\)\]\}',?\n/,o={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return r.isFormData(e)||r.isArrayBuffer(e)||r.isStream(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(i,"");try{e=JSON.parse(e)}catch(e){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(o),post:r.merge(o),put:r.merge(o)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&300>e}}},function(e,t){function n(e){return"[object Array]"===b.call(e)}function r(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function o(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function a(e){return"string"==typeof e}function u(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function c(e){return"[object File]"===b.call(e)}function d(e){return"[object Blob]"===b.call(e)}function p(e){return"[object Function]"===b.call(e)}function h(e){return f(e)&&p(e.pipe)}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function v(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||n(e)||(e=[e]),n(e))for(var r=0,i=e.length;i>r;r++)t.call(null,e[r],r,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(null,e[o],o,e)}function g(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=g(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var b=Object.prototype.toString;e.exports={isArray:n,isArrayBuffer:r,isFormData:i,isArrayBufferView:o,isString:a,isNumber:u,isObject:f,isUndefined:s,isDate:l,isFile:c,isBlob:d,isFunction:p,isStream:h,isStandardBrowserEnv:v,forEach:m,merge:g,trim:y}},function(e,t,n){e.exports=function(e){return new Promise(function(t,r){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=n(5):"undefined"!=typeof process&&(i=n(5)),"function"==typeof i&&i(t,r,e)}catch(e){r(e)}})}},function(e,t,n){var r=n(3),i=n(6),o=n(7),a=n(8),u=n(9),s="undefined"!=typeof window&&window.btoa||n(10),f=n(11);e.exports=function(e,t,l){var c=l.data,d=l.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(l.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),l.auth){var v=l.auth.username||"",m=l.auth.password||"";d.Authorization="Basic "+s(v+":"+m)}if(p.open(l.method.toUpperCase(),i(l.url,l.params,l.paramsSerializer),!0),p.timeout=l.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?o(p.getAllResponseHeaders()):null,r=l.responseType&&"text"!==l.responseType?p.response:p.responseText,i={data:a(r,n,l.transformResponse),status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:l,request:p};f(e,t,i),p=null}},p.onerror=function(){t(new Error("Network Error")),p=null},p.ontimeout=function(){var e=new Error("timeout of "+l.timeout+"ms exceeded");e.timeout=l.timeout,e.code="ECONNABORTED",t(e),p=null},r.isStandardBrowserEnv()){var g=n(12),b=l.withCredentials||u(l.url)?g.read(l.xsrfCookieName):void 0;b&&(d[l.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(e,t){"undefined"==typeof c&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),l.withCredentials&&(p.withCredentials=!0),l.responseType)try{p.responseType=l.responseType}catch(e){if("json"!==p.responseType)throw e}l.progress&&("post"===l.method||"put"===l.method?p.upload.addEventListener("progress",l.progress):"get"===l.method&&p.addEventListener("progress",l.progress)),void 0===c&&(c=null),p.send(c)}},function(e,t,n){function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(3);e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else{var a=[];i.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(i.isArray(e)&&(t+="[]"),i.isArray(e)||(e=[e]),i.forEach(e,function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))}))}),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){var r=n(3);e.exports=function(e){var t,n,i,o={};return e?(r.forEach(e.split("\n"),function(e){i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t&&(o[t]=o[t]?o[t]+", "+n:n)}),o):o}},function(e,t,n){var r=n(3);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(i.setAttribute("href",t),t=i.href),i.setAttribute("href",t),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return t=e(window.location.href),function(n){var i=r.isString(n)?e(n):n;return i.protocol===t.protocol&&i.host===t.host}}():function(){return function(){return!0}}()},function(e,t){function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,o=String(e),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&t>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t){e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(n):e(n)}},function(e,t,n){var r=n(3);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,i,o,a){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t){e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){e.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},function(e,t){e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;ri;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},g=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},b=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},w=function(e,n,r){r||(r={}),r.with||(r.with=[]);var i=e.relationFields||[],o=i.filter(function(e){return-1===r.with.indexOf(e)});return t.utils.omit(n,o)},A={debug:!1,raw:!1};r.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(r.prototype,{afterCount:g,afterCreate:g,afterCreateMany:g,afterDestroy:g,afterDestroyAll:g,afterFind:g,afterFindAll:g,afterSum:g,afterUpdate:g,afterUpdateAll:g,afterUpdateMany:g,beforeCount:m,beforeCreate:m,beforeCreateMany:m,beforeDestroy:m,beforeDestroyAll:m,beforeFind:m,beforeFindAll:m,beforeSum:m,beforeUpdate:m,beforeUpdateAll:m,beforeUpdateMany:m,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCount",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="count",o.dbg(a,e,n,r),t.utils.resolve(o._count(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,a);return c=o.respond(c,r),a=r.op="afterCount",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},create:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreate",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n,r),a=r.op="create",o.dbg(a,e,n,r),t.utils.resolve(o._create(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"create");return c.created=f?1:0,c=o.respond(c,r),a=r.op="afterCreate",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},createMany:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeCreateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t,r)}),a=r.op="createMany",o.dbg(a,e,n,r),t.utils.resolve(o._createMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"createMany");return c.created=f.length,c=o.respond(c,r),a=r.op="afterCreateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroy:function(e,n,r){var o=this,a=void 0;return r||(r={}),a=r.op="beforeDestroy",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroy",o.dbg(a,e,n,r),t.utils.resolve(o._destroy(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroy");return c=o.respond(c,r),a=r.op="afterDestroy",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},destroyAll:function(e,n,r){var o=this,a=void 0;return n||(n={}),r||(r={}),a=r.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,r)).then(function(){return a=r.op="destroyAll",o.dbg(a,e,n,r),t.utils.resolve(o._destroyAll(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];l||(l={});var c=new i(f,l,"destroyAll");return c=o.respond(c,r),a=r.op="afterDestroyAll",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:h.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},find:function(e,n,r){var o=this,a=void 0,u=void 0;return r||(r={}),r.with||(r.with=[]),u=r.op="beforeFind",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="find",o.dbg(u,e,n,r),t.utils.resolve(o._find(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new i(a,{},"find");return s.found=a?1:0,s=o.respond(s,r),u=r.op="afterFind",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,r){var o=this;r||(r={}),r.with||(r.with=[]);var a=[],u=void 0,s=r._activeWith;if(t.utils.isObject(s)){var f=s.query||{};s.replace?n=f:t.utils.deepFillIn(n,f)}return u=r.op="beforeFindAll",t.utils.resolve(o[u](e,n,r)).then(function(){return u=r.op="findAll",o.dbg(u,e,n,r),t.utils.resolve(o._findAll(e,n,r))}).then(function(n){var i=h.slicedToArray(n,1),u=i[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,r,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new i(a,{},"findAll");return s.found=a.length,s=o.respond(s,r),u=r.op="afterFindAll",t.utils.resolve(o[u](e,n,r,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},f=s.where[n.foreignKey]={};return a?f["=="]=u[0]:f.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:h.defineProperty({},u.idAttribute,{in:b(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":h.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:h.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:h.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),b(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,r,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return r||(r={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,r,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,r,o),t.utils.resolve(a._sum(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,u);return d=a.respond(d,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,r,o){var a=this;r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return r=t.utils.isUndefined(i)?r:i,r=w(e,r,o),u=o.op="update",a.dbg(u,e,n,r,o),t.utils.resolve(a._update(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];c||(c={});var d=new i(l,c,"update");return d.updated=l?1:0,d=a.respond(d,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateAll:function(e,n,r,o){var a=this;n||(n={}),r||(r={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,r,o)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=w(e,n,o),u=o.op="updateAll",a.dbg(u,e,n,r,o),t.utils.resolve(a._updateAll(e,n,r,o))}).then(function(s){var f=h.slicedToArray(s,2),l=f[0],c=f[1];l||(l=[]),c||(c={});var d=new i(l,c,"updateAll");return d.updated=l.length,d=a.respond(d,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,r,o,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},updateMany:function(e,n,r){var o=this;n||(n=[]),r||(r={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=r.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,r)).then(function(i){return n=t.utils.isUndefined(i)?n:i,n=n.map(function(t){return w(e,t,r)}),a=r.op="updateMany",o.dbg(a,e,n,r),t.utils.resolve(o._updateMany(e,n,r))}).then(function(u){var s=h.slicedToArray(u,2),f=s[0],l=s[1];f||(f=[]),l||(l={});var c=new i(f,l,"updateMany");return c.updated=f.length,c=o.respond(c,r),a=r.op="afterUpdateMany",t.utils.resolve(o[a](e,n,r,c)).then(function(e){return t.utils.isUndefined(e)?c:e})})}});var T=!1;try{T=window&&window.fetch}catch(e){}var x=r.prototype,E={basePath:"",forceTrailingSlash:!1,http:v,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(r.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:r}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:g,afterGET:g,afterHTTP:g,afterPOST:g,afterPUT:g,beforeDEL:m,beforeGET:m,beforeHTTP:m,beforePOST:m,beforePUT:m,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(f(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),x.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],a=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,f=e.getRelation(),l=r.params[s];if(l===!1||!s||!f)return l===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(l=l||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),f.idAttribute):null)),l){var c=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,f),a=u(i.getEndpoint(f,l,e),l,a),{v:!1}}();if("object"===("undefined"==typeof c?"undefined":h.typeof(c)))return c.v}}}),a},getPath:function(e,n,r,i){var o=this;i||(i={});var a=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(r),u.apply(t.utils,a)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var f=e.suffix||n.suffix||i.suffix;if(f&&e.url.substr(e.url.length-f.length)!==f&&(e.url+=f),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,T&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put", -a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),x.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),x.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),x.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),x.updateMany.call(r,e,t,n)}});var P={beta:7,full:"3.0.0-beta.7",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=c,e.addActions=d,e.version=P}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,e){return e={exports:{}},t(e,e.exports),e.exports}function r(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function i(t){e.utils.classCallCheck(this,i),e.Component.call(this),t||(t={}),e.utils.fillIn(t,T),e.utils.fillIn(this,t)}function o(t){return null!=t&&""!==t}function a(t,e){return e||(e=""),t.filter(o).join(e)}function s(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,S),i.call(this,t)}function c(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":v(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),u={};if(e.utils.fillIn(u,n),!i.hasOwnProperty("endpoint")&&u.endpoint&&(i.endpoint=u.endpoint),"function"==typeof i.getEndpoint)u.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),u.url=s.apply(null,f)}return u.method=u.method||"GET",u.mapper=this.name,e.utils.deepMixIn(u,i),e.utils.resolve(u).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){c(e,t)(n)}),n}}var d="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h=n(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(d,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){this.defaults=o.merge({},t),this.interceptors={request:new s,response:new s}}var i=n(2),o=n(3),a=n(5),s=n(14),u=n(15),f=n(16),l=n(17),c=n(9);r.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:"get"},t),t.baseURL&&!u(t.url)&&(t.url=f(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=c(t.data,t.headers,t.transformRequest),t.headers=o.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[a,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(i),d=t.exports=l(r.prototype.request,p);d.request=l(r.prototype.request,p),d.Axios=r,d.defaults=p.defaults,d.interceptors=p.interceptors,d.create=function(t){return new r(t)},d.all=function(t){return Promise.all(t)},d.spread=n(18),o.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))},d[t]=l(r.prototype[t],p)}),o.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))},d[t]=l(r.prototype[t],p)})},function(t,e,n){function r(t,e){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var i=n(3),o=n(4),a=/^\)\]\}',?\n/,s={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(t,e){return o(e,"Content-Type"),i.isFormData(t)||i.isArrayBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(r(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):i.isObject(t)?(r(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(a,"");try{t=JSON.parse(t)}catch(t){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:i.merge(s),post:i.merge(s),put:i.merge(s)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}}},function(t,e){function n(t){return"[object Array]"===w.call(t)}function r(t){return"[object ArrayBuffer]"===w.call(t)}function i(t){return"undefined"!=typeof FormData&&t instanceof FormData}function o(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function a(t){return"string"==typeof t}function s(t){return"number"==typeof t}function u(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===w.call(t)}function c(t){return"[object File]"===w.call(t)}function p(t){return"[object Blob]"===w.call(t)}function d(t){return"[object Function]"===w.call(t)}function h(t){return f(t)&&d(t.pipe)}function y(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function v(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||n(t)||(t=[t]),n(t))for(var r=0,i=t.length;r>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e){t.exports=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(n):t(n)}},function(t,e,n){var r=n(3);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,E&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n; +},sum:function(t,n,r,o){if(r||(r={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,r),o.params=this.queryTransform(t,o.params,o),i.prototype.sum.call(this,t,n,r,o)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),i.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,o){return r||(r={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,r),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),i.prototype.updateAll.call(this,t,n,r,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),i.prototype.updateMany.call(this,t,e,n)}});var P={beta:8,full:"3.0.0-beta.8",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=c,t.addActions=p,t.version=P,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index 69c263b..a653973 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","__commonjs","fn","__commonjs_global","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isArrayBufferView","buffer","isFile","isBlob","isUndefined","toLowerCase","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","trim","str","isStandardBrowserEnv","document","createElement","l","assignValue","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","axios$1","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","addHiddenPropsToTarget","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","_props","_create","_results2","created","createMany","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","hasFetch","fetch","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","logResponse","start","toUTCString","getTime","payload","cache","catch","version","beta","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","undefined","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","setContentTypeIfUnset","isUndefined","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","assignValue","Object","normalizedName","toUpperCase","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","beta","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index d6758ba..887ed1f 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,6 +1,6 @@ /*! * js-data-fetch -* @version 3.0.0-beta.7 - Homepage +* @version 3.0.0-beta.8 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -12,14 +12,13 @@ (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); }(this, function (exports,jsData) { 'use strict'; - var babelHelpers = {}; - babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - babelHelpers.defineProperty = function (obj, key, value) { + var defineProperty = function (obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, @@ -34,7 +33,7 @@ return obj; }; - babelHelpers.slicedToArray = function () { + var slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; @@ -72,29 +71,23 @@ }; }(); - babelHelpers; - var noop = function noop() { - var self = this; - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var opts = args[args.length - 1]; - self.dbg.apply(self, [opts.op].concat(args)); + this.dbg.apply(this, [opts.op].concat(args)); return jsData.utils.resolve(); }; var noop2 = function noop2() { - var self = this; - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var opts = args[args.length - 2]; - self.dbg.apply(self, [opts.op].concat(args)); + this.dbg.apply(this, [opts.op].concat(args)); return jsData.utils.resolve(); }; @@ -121,6 +114,34 @@ return jsData.utils.omit(props, toStrip); }; + /** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ + function Response(data, meta, op) { + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + this.data = data; + + jsData.utils.fillIn(this, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + this.op = op; + } + var DEFAULTS$1 = { /** * Whether to log debugging information. @@ -146,61 +167,23 @@ * * @class Adapter * @abstract + * @extends Component * @param {Object} [opts] Configuration opts. * @param {boolean} [opts.debug=false] Whether to log debugging information. * @param {boolean} [opts.raw=false] Whether to return a more detailed response * object. */ function Adapter(opts) { - var self = this; + jsData.utils.classCallCheck(this, Adapter); + jsData.Component.call(this); opts || (opts = {}); jsData.utils.fillIn(opts, DEFAULTS$1); - jsData.utils.fillIn(self, opts); + jsData.utils.fillIn(this, opts); } - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - var self = this; - meta || (meta = {}); + jsData.Component.extend({ + constructor: Adapter, - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - self.data = data; - - jsData.utils.fillIn(self, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - self.op = op; - } - - /** - * Alternative to ES6 class syntax for extending `Adapter`. - * - * @name Adapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `Adapter`. - */ - Adapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(Adapter.prototype, { /** * Lifecycle method method called by count. * @@ -667,21 +650,6 @@ */ beforeUpdateMany: noop, - /** - * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`. - * - * @name Adapter#dbg - * @method - */ - dbg: function dbg() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['debug'].concat(args)); - }, - - /** * Retrieve the number of records that match the selection query. Called by * `Mapper#count`. @@ -702,33 +670,33 @@ * @return {Promise} */ count: function count(mapper, query, opts) { - var self = this; + var _this = this; + var op = void 0; query || (query = {}); opts || (opts = {}); // beforeCount lifecycle hook op = opts.op = 'beforeCount'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { // Allow for re-assignment from lifecycle hook op = opts.op = 'count'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._count(mapper, query, opts)); + _this.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this._count(mapper, query, opts)); }).then(function (results) { - var _results = babelHelpers.slicedToArray(results, 2); + var _results = slicedToArray(results, 2); var data = _results[0]; var result = _results[1]; result || (result = {}); var response = new Response(data, result, op); - response = self.respond(response, opts); + response = _this.respond(response, opts); // afterCount lifecycle hook op = opts.op = 'afterCount'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -747,22 +715,23 @@ * @return {Promise} */ create: function create(mapper, props, opts) { - var self = this; + var _this2 = this; + var op = void 0; props || (props = {}); opts || (opts = {}); // beforeCreate lifecycle hook op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'create'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._create(mapper, props, opts)); + _this2.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this2._create(mapper, props, opts)); }).then(function (results) { - var _results2 = babelHelpers.slicedToArray(results, 2); + var _results2 = slicedToArray(results, 2); var data = _results2[0]; var result = _results2[1]; @@ -770,13 +739,12 @@ result || (result = {}); var response = new Response(data, result, 'create'); response.created = data ? 1 : 0; - response = self.respond(response, opts); + response = _this2.respond(response, opts); // afterCreate lifecycle hook op = opts.op = 'afterCreate'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -795,24 +763,25 @@ * @return {Promise} */ createMany: function createMany(mapper, props, opts) { - var self = this; + var _this3 = this; + var op = void 0; props || (props = {}); opts || (opts = {}); // beforeCreateMany lifecycle hook op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = props.map(function (record) { return withoutRelations(mapper, record, opts); }); op = opts.op = 'createMany'; - self.dbg(op, mapper, props, opts); - return jsData.utils.resolve(self._createMany(mapper, props, opts)); + _this3.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); }).then(function (results) { - var _results3 = babelHelpers.slicedToArray(results, 2); + var _results3 = slicedToArray(results, 2); var data = _results3[0]; var result = _results3[1]; @@ -821,13 +790,12 @@ result || (result = {}); var response = new Response(data, result, 'createMany'); response.created = data.length; - response = self.respond(response, opts); + response = _this3.respond(response, opts); // afterCreateMany lifecycle hook op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -847,31 +815,31 @@ * @return {Promise} */ destroy: function destroy(mapper, id, opts) { - var self = this; + var _this4 = this; + var op = void 0; opts || (opts = {}); // beforeDestroy lifecycle hook op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { op = opts.op = 'destroy'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._destroy(mapper, id, opts)); + _this4.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); }).then(function (results) { - var _results4 = babelHelpers.slicedToArray(results, 2); + var _results4 = slicedToArray(results, 2); var data = _results4[0]; var result = _results4[1]; result || (result = {}); var response = new Response(data, result, 'destroy'); - response = self.respond(response, opts); + response = _this4.respond(response, opts); // afterDestroy lifecycle hook op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -897,32 +865,32 @@ * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { - var self = this; + var _this5 = this; + var op = void 0; query || (query = {}); opts || (opts = {}); // beforeDestroyAll lifecycle hook op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { op = opts.op = 'destroyAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._destroyAll(mapper, query, opts)); + _this5.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); }).then(function (results) { - var _results5 = babelHelpers.slicedToArray(results, 2); + var _results5 = slicedToArray(results, 2); var data = _results5[0]; var result = _results5[1]; result || (result = {}); var response = new Response(data, result, 'destroyAll'); - response = self.respond(response, opts); + response = _this5.respond(response, opts); // afterDestroyAll lifecycle hook op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -938,28 +906,29 @@ * @return {Promise} */ loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var self = this; + var _this6 = this; + var relationDef = def.getRelation(); if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { var _ret = function () { var record = records; return { - v: self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + v: _this6.find(relationDef, _this6.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { def.setLocalField(record, relatedItem); }) }; }(); - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } else { var keys = records.map(function (record) { - return self.makeBelongsToForeignKey(mapper, def, record); + return _this6.makeBelongsToForeignKey(mapper, def, record); }).filter(function (key) { return key; }); - return self.findAll(relationDef, { - where: babelHelpers.defineProperty({}, relationDef.idAttribute, { + return this.findAll(relationDef, { + where: defineProperty({}, relationDef.idAttribute, { 'in': keys }) }, __opts).then(function (relatedItems) { @@ -989,7 +958,8 @@ * @return {Promise} */ find: function find(mapper, id, opts) { - var self = this; + var _this7 = this; + var record = void 0, op = void 0; opts || (opts = {}); @@ -997,12 +967,12 @@ // beforeFind lifecycle hook op = opts.op = 'beforeFind'; - return jsData.utils.resolve(self[op](mapper, id, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { op = opts.op = 'find'; - self.dbg(op, mapper, id, opts); - return jsData.utils.resolve(self._find(mapper, id, opts)); + _this7.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this7._find(mapper, id, opts)); }).then(function (results) { - var _results6 = babelHelpers.slicedToArray(results, 1); + var _results6 = slicedToArray(results, 1); var _record = _results6[0]; @@ -1016,33 +986,32 @@ var task = void 0; if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { if (def.type === 'hasOne') { - task = self.loadHasOne(mapper, def, record, __opts); + task = _this7.loadHasOne(mapper, def, record, __opts); } else { - task = self.loadHasMany(mapper, def, record, __opts); + task = _this7.loadHasMany(mapper, def, record, __opts); } } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, record, __opts); + task = _this7.loadHasManyLocalKeys(mapper, def, record, __opts); } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, record, __opts); + task = _this7.loadHasManyForeignKeys(mapper, def, record, __opts); } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, record, __opts); + task = _this7.loadBelongsTo(mapper, def, record, __opts); } if (task) { tasks.push(task); } }); - return Promise.all(tasks); + return jsData.utils.Promise.all(tasks); }).then(function () { var response = new Response(record, {}, 'find'); response.found = record ? 1 : 0; - response = self.respond(response, opts); + response = _this7.respond(response, opts); // afterFind lifecycle hook op = opts.op = 'afterFind'; - return jsData.utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1068,7 +1037,8 @@ * @return {Promise} */ findAll: function findAll(mapper, query, opts) { - var self = this; + var _this8 = this; + opts || (opts = {}); opts.with || (opts.with = []); @@ -1087,12 +1057,12 @@ // beforeFindAll lifecycle hook op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { op = opts.op = 'findAll'; - self.dbg(op, mapper, query, opts); - return jsData.utils.resolve(self._findAll(mapper, query, opts)); + _this8.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); }).then(function (results) { - var _results7 = babelHelpers.slicedToArray(results, 1); + var _results7 = slicedToArray(results, 1); var _records = _results7[0]; @@ -1103,32 +1073,31 @@ var task = void 0; if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { if (def.type === 'hasMany') { - task = self.loadHasMany(mapper, def, records, __opts); + task = _this8.loadHasMany(mapper, def, records, __opts); } else { - task = self.loadHasOne(mapper, def, records, __opts); + task = _this8.loadHasOne(mapper, def, records, __opts); } } else if (def.type === 'hasMany' && def.localKeys) { - task = self.loadHasManyLocalKeys(mapper, def, records, __opts); + task = _this8.loadHasManyLocalKeys(mapper, def, records, __opts); } else if (def.type === 'hasMany' && def.foreignKeys) { - task = self.loadHasManyForeignKeys(mapper, def, records, __opts); + task = _this8.loadHasManyForeignKeys(mapper, def, records, __opts); } else if (def.type === 'belongsTo') { - task = self.loadBelongsTo(mapper, def, records, __opts); + task = _this8.loadBelongsTo(mapper, def, records, __opts); } if (task) { tasks.push(task); } }); - return Promise.all(tasks); + return jsData.utils.Promise.all(tasks); }).then(function () { var response = new Response(records, {}, 'findAll'); response.found = records.length; - response = self.respond(response, opts); + response = _this8.respond(response, opts); // afterFindAll lifecycle hook op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1146,7 +1115,7 @@ */ getOpt: function getOpt(opt, opts) { opts || (opts = {}); - return jsData.utils.isUndefined(opts[opt]) ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); }, @@ -1160,7 +1129,8 @@ * @return {Promise} */ loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var self = this; + var _this9 = this; + var singular = false; if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { @@ -1168,7 +1138,7 @@ records = [records]; } var IDs = records.map(function (record) { - return self.makeHasManyForeignKey(mapper, def, record); + return _this9.makeHasManyForeignKey(mapper, def, record); }); var query = { where: {} @@ -1182,7 +1152,7 @@ return id; }); } - return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { records.forEach(function (record) { var attached = []; // avoid unneccesary iteration when we only have one record @@ -1200,7 +1170,8 @@ }); }, loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var self = this; + var _this10 = this; + var record = void 0; var relatedMapper = def.getRelation(); @@ -1209,9 +1180,9 @@ } if (record) { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { - 'in': self.makeHasManyLocalKeys(mapper, def, record) + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': this.makeHasManyLocalKeys(mapper, def, record) }) }, __opts).then(function (relatedItems) { def.setLocalField(record, relatedItems); @@ -1220,11 +1191,11 @@ var _ret2 = function () { var localKeys = []; records.forEach(function (record) { - localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record)); + localKeys = localKeys.concat(_this10.makeHasManyLocalKeys(mapper, def, record)); }); return { - v: self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, relatedMapper.idAttribute, { + v: _this10.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { 'in': unique(localKeys).filter(function (x) { return x; }) @@ -1246,11 +1217,12 @@ }; }(); - if ((typeof _ret2 === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret2)) === "object") return _ret2.v; + if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; } }, loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var self = this; + var _this11 = this; + var relatedMapper = def.getRelation(); var idAttribute = mapper.idAttribute; var record = void 0; @@ -1260,18 +1232,18 @@ } if (record) { - return self.findAll(def.getRelation(), { - where: babelHelpers.defineProperty({}, def.foreignKeys, { - 'contains': self.makeHasManyForeignKeys(mapper, def, record) + return this.findAll(def.getRelation(), { + where: defineProperty({}, def.foreignKeys, { + 'contains': this.makeHasManyForeignKeys(mapper, def, record) }) }, __opts).then(function (relatedItems) { def.setLocalField(record, relatedItems); }); } else { - return self.findAll(relatedMapper, { - where: babelHelpers.defineProperty({}, def.foreignKeys, { + return this.findAll(relatedMapper, { + where: defineProperty({}, def.foreignKeys, { 'isectNotEmpty': records.map(function (record) { - return self.makeHasManyForeignKeys(mapper, def, record); + return _this11.makeHasManyForeignKeys(mapper, def, record); }) }) }, __opts).then(function (relatedItems) { @@ -1316,40 +1288,6 @@ }, - /** - * Logging utility method. Override this method if you want to send log - * messages to something other than the console. - * - * @name Adapter#log - * @method - * @param {string} level Log level. - * @param {...*} values Values to log. - */ - log: function log(level) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - if (level && !args.length) { - args.push(level); - level = 'debug'; - } - if (level === 'debug' && !this.debug) { - return; - } - var prefix = level.toUpperCase() + ': (Adapter)'; - if (console[level]) { - var _console; - - (_console = console)[level].apply(_console, [prefix].concat(args)); - } else { - var _console2; - - (_console2 = console).log.apply(_console2, [prefix].concat(args)); - } - }, - - /** * Return the foreignKey from the given record for the provided relationship. * @@ -1436,7 +1374,8 @@ * @return {Promise} */ sum: function sum(mapper, field, query, opts) { - var self = this; + var _this12 = this; + var op = void 0; if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); @@ -1446,26 +1385,25 @@ // beforeSum lifecycle hook op = opts.op = 'beforeSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts)).then(function () { + return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { // Allow for re-assignment from lifecycle hook op = opts.op = 'sum'; - self.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(self._sum(mapper, field, query, opts)); + _this12.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(_this12._sum(mapper, field, query, opts)); }).then(function (results) { - var _results8 = babelHelpers.slicedToArray(results, 2); + var _results8 = slicedToArray(results, 2); var data = _results8[0]; var result = _results8[1]; result || (result = {}); var response = new Response(data, result, op); - response = self.respond(response, opts); + response = _this12.respond(response, opts); // afterSum lifecycle hook op = opts.op = 'afterSum'; - return jsData.utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this12[op](mapper, field, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1499,22 +1437,23 @@ * @return {Promise} */ update: function update(mapper, id, props, opts) { - var self = this; + var _this13 = this; + props || (props = {}); opts || (opts = {}); var op = void 0; // beforeUpdate lifecycle hook op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'update'; - self.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(self._update(mapper, id, props, opts)); + _this13.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(_this13._update(mapper, id, props, opts)); }).then(function (results) { - var _results9 = babelHelpers.slicedToArray(results, 2); + var _results9 = slicedToArray(results, 2); var data = _results9[0]; var result = _results9[1]; @@ -1522,13 +1461,12 @@ result || (result = {}); var response = new Response(data, result, 'update'); response.updated = data ? 1 : 0; - response = self.respond(response, opts); + response = _this13.respond(response, opts); // afterUpdate lifecycle hook op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this13[op](mapper, id, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1555,7 +1493,8 @@ * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { - var self = this; + var _this14 = this; + props || (props = {}); query || (query = {}); opts || (opts = {}); @@ -1563,15 +1502,15 @@ // beforeUpdateAll lifecycle hook op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) { + return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { // Allow for re-assignment from lifecycle hook - props = jsData.utils.isUndefined(_props) ? props : _props; + props = _props === undefined ? props : _props; props = withoutRelations(mapper, props, opts); op = opts.op = 'updateAll'; - self.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(self._updateAll(mapper, props, query, opts)); + _this14.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(_this14._updateAll(mapper, props, query, opts)); }).then(function (results) { - var _results10 = babelHelpers.slicedToArray(results, 2); + var _results10 = slicedToArray(results, 2); var data = _results10[0]; var result = _results10[1]; @@ -1580,13 +1519,12 @@ result || (result = {}); var response = new Response(data, result, 'updateAll'); response.updated = data.length; - response = self.respond(response, opts); + response = _this14.respond(response, opts); // afterUpdateAll lifecycle hook op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this14[op](mapper, props, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -1605,7 +1543,8 @@ * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { - var self = this; + var _this15 = this; + records || (records = []); opts || (opts = {}); var op = void 0; @@ -1617,17 +1556,17 @@ // beforeUpdateMany lifecycle hook op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts)).then(function (_records) { + return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { // Allow for re-assignment from lifecycle hook - records = jsData.utils.isUndefined(_records) ? records : _records; + records = _records === undefined ? records : _records; records = records.map(function (record) { return withoutRelations(mapper, record, opts); }); op = opts.op = 'updateMany'; - self.dbg(op, mapper, records, opts); - return jsData.utils.resolve(self._updateMany(mapper, records, opts)); + _this15.dbg(op, mapper, records, opts); + return jsData.utils.resolve(_this15._updateMany(mapper, records, opts)); }).then(function (results) { - var _results11 = babelHelpers.slicedToArray(results, 2); + var _results11 = slicedToArray(results, 2); var data = _results11[0]; var result = _results11[1]; @@ -1636,13 +1575,12 @@ result || (result = {}); var response = new Response(data, result, 'updateMany'); response.updated = data.length; - response = self.respond(response, opts); + response = _this15.respond(response, opts); // afterUpdateMany lifecycle hook op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) { - // Allow for re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this15[op](mapper, records, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); } @@ -1707,8 +1645,6 @@ return url; } - var __super__ = Adapter.prototype; - var DEFAULTS = { // Default and user-defined settings /** @@ -1765,10 +1701,12 @@ * @param {boolean} [opts.useFetch=false] TODO */ function HttpAdapter(opts) { - var self = this; + jsData.utils.classCallCheck(this, HttpAdapter); + opts || (opts = {}); + // Fill in any missing options with the defaults jsData.utils.fillIn(opts, DEFAULTS); - Adapter.call(self, opts); + Adapter.call(this, opts); } /** @@ -1776,46 +1714,9 @@ * @see HttpAdapter */ - // Setup prototype inheritance from Adapter - HttpAdapter.prototype = Object.create(Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } - }); - - Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: Adapter - }); + Adapter.extend({ + constructor: HttpAdapter, - /** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() - * - * @name HttpAdapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. - */ - HttpAdapter.extend = jsData.utils.extend; - - jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { /** * @name HttpAdapter#afterDEL * @method @@ -1914,72 +1815,83 @@ beforePUT: noop, _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this = this; + + return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return _this._end(mapper, opts, response); }); }, _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this2 = this; + + return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this2._end(mapper, opts, response); }); }, _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this3 = this; + + return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this3._end(mapper, opts, response); }); }, _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this4 = this; + + return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return _this4._end(mapper, opts, response); }); }, _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this5 = this; + + return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return _this5._end(mapper, opts, response); }); }, _end: function _end(mapper, opts, response) { return [this.deserialize(mapper, response, opts), response]; }, _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this6 = this; + + return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { + return _this6._end(mapper, opts, response); }); }, _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this7 = this; + + return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return _this7._end(mapper, opts, response); }); }, _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this8 = this; + + return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return _this8._end(mapper, opts, response); }); }, _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this9 = this; + + return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this9._end(mapper, opts, response); }); }, _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this10 = this; + + return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this10._end(mapper, opts, response); }); }, _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this11 = this; + + return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { + return _this11._end(mapper, opts, response); }); }, @@ -1997,16 +1909,14 @@ * @return {Promise} */ count: function count(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.count.call(this, mapper, query, opts); }, @@ -2023,13 +1933,11 @@ * @return {Promise} */ create: function create(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.create.call(this, mapper, props, opts); }, @@ -2046,13 +1954,11 @@ * @return {Promise} */ createMany: function createMany(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.createMany.call(this, mapper, props, opts); }, @@ -2068,7 +1974,8 @@ * @return {Promise} */ DEL: function DEL(url, config, opts) { - var self = this; + var _this12 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -2077,18 +1984,17 @@ // beforeDEL lifecycle hook op = opts.op = 'beforeDEL'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this12.dbg(op, url, config, opts); + return _this12.HTTP(config, opts); }).then(function (response) { // afterDEL lifecycle hook op = opts.op = 'afterDEL'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2133,13 +2039,11 @@ * @return {Promise} */ destroy: function destroy(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroy.call(this, mapper, id, opts); }, @@ -2156,15 +2060,13 @@ * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroyAll.call(this, mapper, query, opts); }, @@ -2244,13 +2146,11 @@ * @return {Promise} */ find: function find(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.find.call(this, mapper, id, opts); }, @@ -2267,15 +2167,13 @@ * @return {Promise} */ findAll: function findAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); + opts.params = this.getParams(opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.findAll.call(this, mapper, query, opts); }, @@ -2290,7 +2188,8 @@ * @return {Promise} */ GET: function GET(url, config, opts) { - var self = this; + var _this13 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -2299,18 +2198,17 @@ // beforeGET lifecycle hook op = opts.op = 'beforeGET'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this13.dbg(op, url, config, opts); + return _this13.HTTP(config, opts); }).then(function (response) { // afterGET lifecycle hook op = opts.op = 'afterGET'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2325,7 +2223,8 @@ * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var self = this; + var _this14 = this; + opts || (opts = {}); opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; var relationList = mapper.relationList || []; @@ -2364,13 +2263,13 @@ _opts[key] = value; }); jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); return { v: false }; }(); - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } } }); @@ -2388,9 +2287,8 @@ * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { - var self = this; opts || (opts = {}); - var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; if (method === 'find' || method === 'update' || method === 'destroy') { args.push(id); } @@ -2398,15 +2296,15 @@ }, getParams: function getParams(opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.params)) { + if (opts.params === undefined) { return {}; } return jsData.utils.copy(opts.params); }, getSuffix: function getSuffix(mapper, opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.suffix)) { - if (jsData.utils.isUndefined(mapper.suffix)) { + if (opts.suffix === undefined) { + if (mapper.suffix === undefined) { return this.suffix; } return mapper.suffix; @@ -2425,56 +2323,57 @@ * @return {Promise} */ HTTP: function HTTP(config, opts) { - var self = this; + var _this15 = this; + var start = new Date(); opts || (opts = {}); var payload = config.data; var cache = config.cache; var timeout = config.timeout; config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = jsData.utils.deepMixIn(config, self.httpConfig); + config = jsData.utils.deepMixIn(config, this.httpConfig); config.data = payload; config.cache = cache; config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { config.url += '/'; } config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; + var suffix = config.suffix || opts.suffix || this.suffix; if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { config.url += suffix; } - function logResponse(data) { + var logResponse = function logResponse(data) { var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); + if (_this15.log) { + _this15.dbg('debug', str, data); } return data; } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); + if (_this15.error) { + _this15.error('\'FAILED: ' + str, data); } return jsData.utils.reject(data); } - } + }; - if (!self.http) { + if (!this.http) { throw new Error('You have not configured this adapter with an http library!'); } - return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); + if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { + return _this15.fetch(config, opts).then(logResponse, logResponse); } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); + return _this15.http(config).then(logResponse, logResponse).catch(function (err) { + return _this15.responseError(err, config, opts); }); }).then(function (response) { - return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; + return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2492,7 +2391,8 @@ * @return {Promise} */ POST: function POST(url, data, config, opts) { - var self = this; + var _this16 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -2502,18 +2402,17 @@ // beforePOST lifecycle hook op = opts.op = 'beforePOST'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this16.dbg(op, url, data, config, opts); + return _this16.HTTP(config, opts); }).then(function (response) { // afterPOST lifecycle hook op = opts.op = 'afterPOST'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2531,7 +2430,8 @@ * @return {Promise} */ PUT: function PUT(url, data, config, opts) { - var self = this; + var _this17 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -2541,18 +2441,17 @@ // beforePUT lifecycle hook op = opts.op = 'beforePUT'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this17.dbg(op, url, data, config, opts); + return _this17.HTTP(config, opts); }).then(function (response) { // afterPUT lifecycle hook op = opts.op = 'afterPUT'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -2634,19 +2533,17 @@ * @return {Promise} */ sum: function sum(mapper, field, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); if (!jsData.utils.utils.isString(field)) { throw new Error('field must be a string!'); } - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.sum.call(this, mapper, field, query, opts); }, @@ -2662,13 +2559,11 @@ * @return {Promise} */ update: function update(mapper, id, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.update.call(this, mapper, id, props, opts); }, @@ -2684,15 +2579,13 @@ * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); }, @@ -2714,13 +2607,11 @@ * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateMany.call(this, mapper, records, opts); } }); @@ -2769,7 +2660,7 @@ */ function addAction(name, opts) { if (!name || !jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); } return function (mapper) { if (mapper[name]) { @@ -2785,21 +2676,22 @@ return jsData.utils.reject(err); }; mapper[name] = function (id, _opts) { - var self = this; + var _this18 = this; + if (jsData.utils.isObject(id)) { _opts = id; } _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); var config = {}; jsData.utils.fillIn(config, opts); if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { _opts.endpoint = config.endpoint; } if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); + config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } @@ -2807,13 +2699,13 @@ config.url = makePath.apply(null, args); } config.method = config.method || 'GET'; - config.mapper = self.name; + config.mapper = this.name; jsData.utils.deepMixIn(config, _opts); return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { - data.config.mapper = self.name; + data.config.mapper = _this18.name; } return data; }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); @@ -2888,46 +2780,19 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 7, - full: '3.0.0-beta.7', + beta: 8, + full: '3.0.0-beta.8', major: 3, minor: 0, patch: 0 }; - /** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() - * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() - * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * // ... - * }) - * - * @module js-data-http - */ - exports.HttpAdapter = HttpAdapter; exports.addAction = addAction; exports.addActions = addActions; exports.version = version; + Object.defineProperty(exports, '__esModule', { value: true }); + })); //# sourceMappingURL=js-data-fetch.js.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index de341ee..cddf228 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-fetch.js","sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["\nimport {utils} from 'js-data'\n\nexport const noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter(function (value) {\n return opts.with.indexOf(value) === -1\n })\n return utils.omit(props, toStrip)\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(self, opts)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n const self = this\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n self.data = data\n\n utils.fillIn(self, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n self.op = op\n}\n\n/**\n * Alternative to ES6 class syntax for extending `Adapter`.\n *\n * @name Adapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `Adapter`.\n */\nAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(Adapter.prototype, {\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Shortcut for `#log('debug'[, arg1[, arg2[, argn]]])`.\n *\n * @name Adapter#dbg\n * @method\n */\n dbg (...args) {\n this.log('debug', ...args)\n },\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._count(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._create(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(self[op](mapper, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = props.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'createMany'\n self.dbg(op, mapper, props, opts)\n return utils.resolve(self._createMany(mapper, props, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = self.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(self[op](mapper, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._destroy(mapper, id, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = self.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._destroyAll(mapper, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = self.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const self = this\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return self.find(relationDef, self.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records.map(function (record) {\n return self.makeBelongsToForeignKey(mapper, def, record)\n }).filter(function (key) {\n return key\n })\n return self.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n relatedItems.forEach(function (relatedItem) {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return utils.resolve(self._find(mapper, id, opts))\n }).then(function (results) {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = self.loadHasOne(mapper, def, record, __opts)\n } else {\n task = self.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = self.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(self[op](mapper, id, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return utils.resolve(self._findAll(mapper, query, opts))\n }).then(function (results) {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, function (def, __opts) {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = self.loadHasMany(mapper, def, records, __opts)\n } else {\n task = self.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = self.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = self.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = self.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return Promise.all(tasks)\n }).then(function () {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = self.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(self[op](mapper, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return utils.isUndefined(opts[opt]) ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n const self = this\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map(function (record) {\n return self.makeHasManyForeignKey(mapper, def, record)\n })\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter(function (id) {\n return id\n })\n }\n return self.findAll(def.getRelation(), query, __opts).then(function (relatedItems) {\n records.forEach(function (record) {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach(function (relatedItem) {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n const self = this\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': self.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach(function (record) {\n localKeys = localKeys.concat(self.self.makeHasManyLocalKeys(mapper, def, record))\n })\n return self.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter(function (x) { return x })\n }\n }\n }, __opts).then(function (relatedItems) {\n records.forEach(function (item) {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach(function (relatedItem) {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const self = this\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return self.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': self.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then(function (relatedItems) {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return self.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map(function (record) {\n return self.makeHasManyForeignKeys(mapper, def, record)\n })\n }\n }\n }, __opts).then(function (relatedItems) {\n const foreignKeysField = def.foreignKeys\n records.forEach(function (record) {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach(function (relatedItem) {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(function () {\n records.forEach(function (record) {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Logging utility method. Override this method if you want to send log\n * messages to something other than the console.\n *\n * @name Adapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} values Values to log.\n */\n log (level, ...args) {\n if (level && !args.length) {\n args.push(level)\n level = 'debug'\n }\n if (level === 'debug' && !this.debug) {\n return\n }\n const prefix = `${level.toUpperCase()}: (Adapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\n }\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter(function (x) { return x })\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(self[op](mapper, field, query, opts)).then(function () {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n self.dbg(op, mapper, field, query, opts)\n return utils.resolve(self._sum(mapper, field, query, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = self.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(self[op](mapper, field, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(self[op](mapper, id, props, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return utils.resolve(self._update(mapper, id, props, opts))\n }).then(function (results) {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = self.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(self[op](mapper, id, props, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts)).then(function (_props) {\n // Allow for re-assignment from lifecycle hook\n props = utils.isUndefined(_props) ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return utils.resolve(self._updateAll(mapper, props, query, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(self[op](mapper, props, query, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter(function (record) {\n return utils.get(record, idAttribute)\n })\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(self[op](mapper, records, opts)).then(function (_records) {\n // Allow for re-assignment from lifecycle hook\n records = utils.isUndefined(_records) ? records : _records\n records = records.map(function (record) {\n return withoutRelations(mapper, record, opts)\n })\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return utils.resolve(self._updateMany(mapper, records, opts))\n }).then(function (results) {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = self.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(self[op](mapper, records, opts, response)).then(function (_response) {\n // Allow for re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n }\n})\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","DEFAULTS"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index 2e22b0e..e88dd6d 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.7 - Homepage +* @version 3.0.0-beta.8 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function n(e){var n=this;e||(e={}),t.utils.fillIn(e,g),t.utils.fillIn(n,e)}function r(e,n,r){var i=this;n||(n={}),i.data=e,t.utils.fillIn(i,n),i.op=r}function i(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(i).join(t)}function a(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];var r=o(t,"/");return r.replace(/([^:\/]|^)\/{2,}/g,"$1/")}function u(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function s(e,n){if(!n)return e;var r=[];return t.utils.forOwn(n,function(e,n){null!==e&&"undefined"!=typeof e&&(t.utils.isArray(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():t.utils.isObject(e)&&(e=t.utils.toJson(e)),r.push(u(n)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function l(e){var r=this;e||(e={}),t.utils.fillIn(e,A),n.call(r,e)}function f(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":c.typeof(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,i){var o=this;t.utils.isObject(r)&&(i=r),i=i||{};var u=o.getAdapter(n.adapter||o.defaultAdapter||"http"),s={};if(t.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(o,i);else{var l=[i.basePath||o.basePath||u.basePath,u.getEndpoint(o,t.utils.isSorN(r)?r:null,i)];t.utils.isSorN(r)&&l.push(r),l.push(n.pathname||e),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=o.name,t.utils.deepMixIn(s,i),t.utils.resolve(s).then(i.request||n.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(i.response||n.response,i.responseError||n.responseError)},r}}function d(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){f(t,e)(n)}),n}}var c={};c.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},c.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},c.slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var p=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-1];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},h=function(){for(var e=this,n=arguments.length,r=Array(n),i=0;n>i;i++)r[i]=arguments[i];var o=r[r.length-2];return e.dbg.apply(e,[o.op].concat(r)),t.utils.resolve()},y=function(e){var t={},n=[];return e.forEach(function(e){e in t||(n.push(e),t[e]=0)}),n},v=function(e,n,r){r||(r={}),r.with||(r.with=[]);var i=e.relationFields||[],o=i.filter(function(e){return-1===r.with.indexOf(e)});return t.utils.omit(n,o)},g={debug:!1,raw:!1};n.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(n.prototype,{afterCount:h,afterCreate:h,afterCreateMany:h,afterDestroy:h,afterDestroyAll:h,afterFind:h,afterFindAll:h,afterSum:h,afterUpdate:h,afterUpdateAll:h,afterUpdateMany:h,beforeCount:p,beforeCreate:p,beforeCreateMany:p,beforeDestroy:p,beforeDestroyAll:p,beforeFind:p,beforeFindAll:p,beforeSum:p,beforeUpdate:p,beforeUpdateAll:p,beforeUpdateMany:p,dbg:function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];this.log.apply(this,["debug"].concat(t))},count:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCount",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="count",o.dbg(a,e,n,i),t.utils.resolve(o._count(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,a);return d=o.respond(d,i),a=i.op="afterCount",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},create:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreate",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n,i),a=i.op="create",o.dbg(a,e,n,i),t.utils.resolve(o._create(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"create");return d.created=l?1:0,d=o.respond(d,i),a=i.op="afterCreate",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},createMany:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeCreateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t,i)}),a=i.op="createMany",o.dbg(a,e,n,i),t.utils.resolve(o._createMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"createMany");return d.created=l.length,d=o.respond(d,i),a=i.op="afterCreateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroy:function(e,n,i){var o=this,a=void 0;return i||(i={}),a=i.op="beforeDestroy",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroy",o.dbg(a,e,n,i),t.utils.resolve(o._destroy(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroy");return d=o.respond(d,i),a=i.op="afterDestroy",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},destroyAll:function(e,n,i){var o=this,a=void 0;return n||(n={}),i||(i={}),a=i.op="beforeDestroyAll",t.utils.resolve(o[a](e,n,i)).then(function(){return a=i.op="destroyAll",o.dbg(a,e,n,i),t.utils.resolve(o._destroyAll(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];f||(f={});var d=new r(l,f,"destroyAll");return d=o.respond(d,i),a=i.op="afterDestroyAll",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})},loadBelongsTo:function(e,n,r,i){var o=this,a=n.getRelation();if(!t.utils.isObject(r)||t.utils.isArray(r)){var u=r.map(function(t){return o.makeBelongsToForeignKey(e,n,t)}).filter(function(e){return e});return o.findAll(a,{where:c.defineProperty({},a.idAttribute,{in:u})},i).then(function(e){r.forEach(function(t){e.forEach(function(e){e[a.idAttribute]===t[n.foreignKey]&&n.setLocalField(t,e)})})})}var s=function(){var t=r;return{v:o.find(a,o.makeBelongsToForeignKey(e,n,t),i).then(function(e){n.setLocalField(t,e)})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},find:function(e,n,i){var o=this,a=void 0,u=void 0;return i||(i={}),i.with||(i.with=[]),u=i.op="beforeFind",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="find",o.dbg(u,e,n,i),t.utils.resolve(o._find(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];if(u){a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasOne"===t.type?o.loadHasOne(e,t,a,n):o.loadHasMany(e,t,a,n),r&&s.push(r)}),Promise.all(s)}}).then(function(){var s=new r(a,{},"find");return s.found=a?1:0,s=o.respond(s,i),u=i.op="afterFind",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},findAll:function(e,n,i){var o=this;i||(i={}),i.with||(i.with=[]);var a=[],u=void 0,s=i._activeWith;if(t.utils.isObject(s)){var l=s.query||{};s.replace?n=l:t.utils.deepFillIn(n,l)}return u=i.op="beforeFindAll",t.utils.resolve(o[u](e,n,i)).then(function(){return u=i.op="findAll",o.dbg(u,e,n,i),t.utils.resolve(o._findAll(e,n,i))}).then(function(n){var r=c.slicedToArray(n,1),u=r[0];u||(u=[]),a=u;var s=[];return t.utils.forEachRelation(e,i,function(t,n){var r=void 0;!t.foreignKey||"hasOne"!==t.type&&"hasMany"!==t.type?"hasMany"===t.type&&t.localKeys?r=o.loadHasManyLocalKeys(e,t,a,n):"hasMany"===t.type&&t.foreignKeys?r=o.loadHasManyForeignKeys(e,t,a,n):"belongsTo"===t.type&&(r=o.loadBelongsTo(e,t,a,n)):r="hasMany"===t.type?o.loadHasMany(e,t,a,n):o.loadHasOne(e,t,a,n),r&&s.push(r)}),Promise.all(s)}).then(function(){var s=new r(a,{},"findAll");return s.found=a.length,s=o.respond(s,i),u=i.op="afterFindAll",t.utils.resolve(o[u](e,n,i,s)).then(function(e){return t.utils.isUndefined(e)?s:e})})},getOpt:function(e,n){return n||(n={}),t.utils.isUndefined(n[e])?t.utils.plainCopy(this[e]):t.utils.plainCopy(n[e])},loadHasMany:function(e,n,r,i){var o=this,a=!1;t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=!0,r=[r]);var u=r.map(function(t){return o.makeHasManyForeignKey(e,n,t)}),s={where:{}},l=s.where[n.foreignKey]={};return a?l["=="]=u[0]:l.in=u.filter(function(e){return e}),o.findAll(n.getRelation(),s,i).then(function(i){r.forEach(function(r){var o=[];a?o=i:i.forEach(function(i){t.utils.get(i,n.foreignKey)===r[e.idAttribute]&&o.push(i)}),n.setLocalField(r,o)})})},loadHasManyLocalKeys:function(e,n,r,i){var o=this,a=void 0,u=n.getRelation();if(t.utils.isObject(r)&&!t.utils.isArray(r)&&(a=r),a)return o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:o.makeHasManyLocalKeys(e,n,a)})},i).then(function(e){n.setLocalField(a,e)});var s=function(){var a=[];return r.forEach(function(t){a=a.concat(o.self.makeHasManyLocalKeys(e,n,t))}),{v:o.findAll(u,{where:c.defineProperty({},u.idAttribute,{in:y(a).filter(function(e){return e})})},i).then(function(e){return r.forEach(function(r){var i=[],o=t.utils.get(r,n.localKeys)||[];o=t.utils.isArray(o)?o:Object.keys(o),e.forEach(function(e){o&&-1!==o.indexOf(e[u.idAttribute])&&i.push(e)}),n.setLocalField(r,i)}),e})}}();return"object"===("undefined"==typeof s?"undefined":c.typeof(s))?s.v:void 0},loadHasManyForeignKeys:function(e,n,r,i){var o=this,a=n.getRelation(),u=e.idAttribute,s=void 0;return t.utils.isObject(r)&&!t.utils.isArray(r)&&(s=r),s?o.findAll(n.getRelation(),{where:c.defineProperty({},n.foreignKeys,{contains:o.makeHasManyForeignKeys(e,n,s)})},i).then(function(e){n.setLocalField(s,e)}):o.findAll(a,{where:c.defineProperty({},n.foreignKeys,{isectNotEmpty:r.map(function(t){return o.makeHasManyForeignKeys(e,n,t)})})},i).then(function(e){var i=n.foreignKeys;r.forEach(function(r){var o=[],a=t.utils.get(r,u);e.forEach(function(n){var r=t.utils.get(e,i)||[];-1!==r.indexOf(a)&&o.push(n)}),n.setLocalField(r,o)})})},loadHasOne:function(e,n,r,i){return t.utils.isObject(r)&&!t.utils.isArray(r)&&(r=[r]),this.loadHasMany(e,n,r,i).then(function(){r.forEach(function(e){var r=n.getLocalField(e);t.utils.isArray(r)&&r.length&&n.setLocalField(e,r[0])})})},log:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;t>r;r++)n[r-1]=arguments[r];if(e&&!n.length&&(n.push(e),e="debug"),"debug"!==e||this.debug){var i=e.toUpperCase()+": (Adapter)";if(console[e]){var o;(o=console)[e].apply(o,[i].concat(n))}else{var a;(a=console).log.apply(a,[i].concat(n))}}},makeHasManyForeignKey:function(e,t,n){return t.getForeignKey(n)},makeHasManyLocalKeys:function(e,n,r){var i=[],o=t.utils.get(r,n.localKeys)||[];return o=t.utils.isArray(o)?o:Object.keys(o),i=i.concat(o),y(i).filter(function(e){return e})},makeHasManyForeignKeys:function(e,n,r){return t.utils.get(r,e.idAttribute)},makeBelongsToForeignKey:function(e,t,n){return t.getForeignKey(n)},sum:function(e,n,i,o){var a=this,u=void 0;if(!t.utils.isString(n))throw new Error("field must be a string!");return i||(i={}),o||(o={}),u=o.op="beforeSum",t.utils.resolve(a[u](e,n,i,o)).then(function(){return u=o.op="sum",a.dbg(u,e,n,i,o),t.utils.resolve(a._sum(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,u);return p=a.respond(p,o),u=o.op="afterSum",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},respond:function(e,t){return this.getOpt("raw",t)?e:e.data},update:function(e,n,i,o){var a=this;i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdate",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return i=t.utils.isUndefined(r)?i:r,i=v(e,i,o),u=o.op="update",a.dbg(u,e,n,i,o),t.utils.resolve(a._update(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];d||(d={});var p=new r(f,d,"update");return p.updated=f?1:0,p=a.respond(p,o),u=o.op="afterUpdate",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateAll:function(e,n,i,o){var a=this;n||(n={}),i||(i={}),o||(o={});var u=void 0;return u=o.op="beforeUpdateAll",t.utils.resolve(a[u](e,n,i,o)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=v(e,n,o),u=o.op="updateAll",a.dbg(u,e,n,i,o),t.utils.resolve(a._updateAll(e,n,i,o))}).then(function(s){var l=c.slicedToArray(s,2),f=l[0],d=l[1];f||(f=[]),d||(d={});var p=new r(f,d,"updateAll");return p.updated=f.length,p=a.respond(p,o),u=o.op="afterUpdateAll",t.utils.resolve(a[u](e,n,i,o,p)).then(function(e){return t.utils.isUndefined(e)?p:e})})},updateMany:function(e,n,i){var o=this;n||(n=[]),i||(i={});var a=void 0,u=e.idAttribute;return n=n.filter(function(e){return t.utils.get(e,u)}),a=i.op="beforeUpdateMany",t.utils.resolve(o[a](e,n,i)).then(function(r){return n=t.utils.isUndefined(r)?n:r,n=n.map(function(t){return v(e,t,i)}),a=i.op="updateMany",o.dbg(a,e,n,i),t.utils.resolve(o._updateMany(e,n,i))}).then(function(u){var s=c.slicedToArray(u,2),l=s[0],f=s[1];l||(l=[]),f||(f={});var d=new r(l,f,"updateMany");return d.updated=l.length,d=o.respond(d,i),a=i.op="afterUpdateMany",t.utils.resolve(o[a](e,n,i,d)).then(function(e){return t.utils.isUndefined(e)?d:e})})}});var m=void 0,b=!1;try{b=window&&window.fetch}catch(e){}var T=n.prototype,A={basePath:"",forceTrailingSlash:!1,http:m,httpConfig:{},suffix:"",useFetch:!1};l.prototype=Object.create(n.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.defineProperty(l,"__super__",{configurable:!0,value:n}),l.extend=t.utils.extend,t.utils.addHiddenPropsToTarget(l.prototype,{afterDEL:h,afterGET:h,afterHTTP:h,afterPOST:h,afterPUT:h,beforeDEL:p,beforeGET:p,beforeHTTP:p,beforePOST:p,beforePUT:p,_count:function(e,t,n){var r=this;return r.GET(r.getPath("count",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_create:function(e,t,n){var r=this;return r.POST(r.getPath("create",e,t,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_createMany:function(e,t,n){var r=this;return r.POST(r.getPath("createMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroy:function(e,t,n){var r=this;return r.DEL(r.getPath("destroy",e,t,n),n).then(function(t){return r._end(e,n,t)})},_destroyAll:function(e,t,n){var r=this;return r.DEL(r.getPath("destroyAll",e,null,n),n).then(function(t){return r._end(e,n,t)})},_end:function(e,t,n){return[this.deserialize(e,n,t),n]},_find:function(e,t,n){var r=this;return r.GET(r.getPath("find",e,t,n),n).then(function(t){return r._end(e,n,t)})},_findAll:function(e,t,n){var r=this;return r.GET(r.getPath("findAll",e,n.params,n),n).then(function(t){return r._end(e,n,t)})},_sum:function(e,t,n,r){var i=this;return i.GET(i.getPath("sum",e,r.params,r),r).then(function(t){return i._end(e,r,t)})},_update:function(e,t,n,r){var i=this;return i.PUT(i.getPath("update",e,t,r),i.serialize(e,n,r),r).then(function(t){return i._end(e,r,t)})},_updateAll:function(e,t,n,r){var i=this;return i.PUT(i.getPath("updateAll",e,null,r),i.serialize(e,t,r),r).then(function(t){return i._end(e,r,t)})},_updateMany:function(e,t,n){var r=this;return r.PUT(r.getPath("updateMany",e,null,n),r.serialize(e,t,n),n).then(function(t){return r._end(e,n,t)})},count:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.params.count=!0,r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.count.call(i,e,n,r)},create:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.create.call(r,e,t,n)},createMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.createMany.call(r,e,t,n)},DEL:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"delete",o=r.op="beforeDEL",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="DEL",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterDEL",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},deserialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.deserialize)?r.deserialize(e,n,r):t.utils.isFunction(e.deserialize)?e.deserialize(e,n,r):n&&n.hasOwnProperty("data")?n.data:n},destroy:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.destroy.call(r,e,t,n)},destroyAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.destroyAll.call(i,e,n,r)},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,n){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=t.utils.toJson(e.data)),fetch(new Request(s(e.url,e.params),r)).then(function(t){return t.config={method:e.method,url:e.url},t.json().then(function(e){return t.data=e,t})})}),find:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.find.call(r,e,t,n)},findAll:function(e,n,r){var i=this;return n||(n={}),r||(r={}),r.params=i.getParams(r),r.suffix=i.getSuffix(e,r),t.utils.deepMixIn(r.params,n),r.params=i.queryTransform(e,r.params,r),T.findAll.call(i,e,n,r)},GET:function(e,n,r){var i=this,o=void 0;return n||(n={}),r||(r={}),n.url=e||n.url,n.method=n.method||"get",o=r.op="beforeGET",t.utils.resolve(i[o](e,n,r)).then(function(a){return n=t.utils.isUndefined(a)?n:a,o=r.op="GET",i.dbg(o,e,n,r),i.HTTP(n,r)}).then(function(a){return o=r.op="afterGET",t.utils.resolve(i[o](e,n,r,a)).then(function(e){return t.utils.isUndefined(e)?a:e})})},getEndpoint:function(e,n,r){var i=this;r||(r={}),r.params=t.utils.isUndefined(r.params)?{}:r.params;var o=e.relationList||[],u=t.utils.isUndefined(r.endpoint)?t.utils.isUndefined(e.endpoint)?e.name:e.endpoint:r.endpoint;return o.forEach(function(e){if("belongsTo"===e.type&&e.parent){var o=void 0,s=e.foreignKey,l=e.getRelation(),f=r.params[s];if(f===!1||!s||!l)return f===!1&&delete r.params[s],!1;if(delete r.params[s],t.utils.isObject(n)&&(o=n),o&&(f=f||e.getForeignKey(o)||(e.getLocalField(o)?t.utils.get(e.getLocalField(o),l.idAttribute):null)),f){var d=function(){delete r.endpoint;var e={};return t.utils.forOwn(r,function(t,n){e[n]=t}),t.utils._(e,l),u=a(i.getEndpoint(l,f,e),f,u),{v:!1}}();if("object"===("undefined"==typeof d?"undefined":c.typeof(d)))return d.v}}}),u},getPath:function(e,n,r,i){var o=this;i||(i={});var u=[t.utils.isUndefined(i.basePath)?t.utils.isUndefined(n.basePath)?o.basePath:n.basePath:i.basePath,o.getEndpoint(n,t.utils.isString(r)||t.utils.isNumber(r)||"create"===e?r:null,i)];return"find"!==e&&"update"!==e&&"destroy"!==e||u.push(r),a.apply(t.utils,u)},getParams:function(e){return e||(e={}),t.utils.isUndefined(e.params)?{}:t.utils.copy(e.params)},getSuffix:function(e,n){return n||(n={}),t.utils.isUndefined(n.suffix)?t.utils.isUndefined(e.suffix)?this.suffix:e.suffix:n.suffix},HTTP:function(e,n){function r(n){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+n.status+" "+((new Date).getTime()-o.getTime())+"ms";return n.status>=200&&n.status<300?(i.log&&i.dbg("debug",r,n),n):(i.error&&i.error("'FAILED: "+r,n),t.utils.reject(n))}var i=this,o=new Date;n||(n={});var a=e.data,u=e.cache,s=e.timeout;e=t.utils.copy(e,null,null,null,["data","cache","timeout"]),e=t.utils.deepMixIn(e,i.httpConfig),e.data=a,e.cache=u,e.timeout=s,i.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var l=e.suffix||n.suffix||i.suffix;if(l&&e.url.substr(e.url.length-l.length)!==l&&(e.url+=l),!i.http)throw new Error("You have not configured this adapter with an http library!");return t.utils.resolve(i.beforeHTTP(e,n)).then(function(t){return e=t||e,b&&(i.useFetch||n.useFetch||!i.http)?i.fetch(e,n).then(r,r):i.http(e).then(r,r).catch(function(t){return i.responseError(t,e,n)})}).then(function(r){return t.utils.resolve(i.afterHTTP(e,n,r)).then(function(e){return e||r})})},POST:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="POST",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},PUT:function(e,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",t.utils.resolve(o[a](e,n,r,i)).then(function(u){return r=t.utils.isUndefined(u)?r:u,a=i.op="PUT",o.dbg(a,e,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",t.utils.resolve(o[a](e,n,r,i,u)).then(function(e){return t.utils.isUndefined(e)?u:e})})},queryTransform:function(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function(e,n,r){return t.utils.reject(e)},serialize:function(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function(e,n,r,i){var o=this;if(r||(r={}),i||(i={}),!t.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=o.getParams(i),i.params.sum=n,i.suffix=o.getSuffix(e,i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),T.sum.call(o,e,n,r,i)},update:function(e,t,n,r){var i=this;return r||(r={}),r.params=i.getParams(r),r.params=i.queryTransform(e,r.params,r),r.suffix=i.getSuffix(e,r),T.update.call(i,e,t,n,r)},updateAll:function(e,n,r,i){var o=this;return r||(r={}),i||(i={}),i.params=o.getParams(i),t.utils.deepMixIn(i.params,r),i.params=o.queryTransform(e,i.params,i),i.suffix=o.getSuffix(e,i),T.updateAll.call(o,e,n,r,i)},updateMany:function(e,t,n){var r=this;return n||(n={}),n.params=r.getParams(n),n.params=r.queryTransform(e,n.params,n),n.suffix=r.getSuffix(e,n),T.updateMany.call(r,e,t,n)}});var P={beta:7,full:"3.0.0-beta.7",major:3,minor:0,patch:0};e.HttpAdapter=l,e.addAction=f,e.addActions=d,e.version=P}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":c(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function h(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={beta:8,full:"3.0.0-beta.8",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=h,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index 4b5909d..0948208 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Adapter","opts","self","utils","fillIn","DEFAULTS$1","Response","data","meta","op","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","call","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","babelHelpers","typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","addHiddenPropsToTarget","prototype","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","_len3","_key3","log","count","query","_count","results","_results","respond","_response","isUndefined","create","_props","_create","_results2","created","createMany","map","record","_createMany","_results3","destroy","_destroy","_results4","destroyAll","_destroyAll","_results5","loadBelongsTo","def","records","__opts","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","attached","get","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","level","_len4","_key4","prefix","toUpperCase","console","_console","_console2","getForeignKey","sum","field","_sum","_results8","update","_update","_results9","updated","updateAll","_updateAll","_results10","updateMany","_updateMany","_results11","axios","hasFetch","fetch","e","__super__","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","isFunction","error","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","logResponse","str","start","toUTCString","status","Date","getTime","payload","cache","timeout","substr","catch","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 1c89ae9..4118dfb 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1,15 +1,15 @@ 'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); + var jsData = require('js-data'); var jsDataAdapter = require('js-data-adapter'); -var babelHelpers = {}; -babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; -babelHelpers; var axios = require('axios'); var hasFetch = false; @@ -70,8 +70,6 @@ function buildUrl(url, params) { return url; } -var __super__ = jsDataAdapter.Adapter.prototype; - var DEFAULTS = { // Default and user-defined settings /** @@ -128,10 +126,12 @@ var DEFAULTS = { * @param {boolean} [opts.useFetch=false] TODO */ function HttpAdapter(opts) { - var self = this; + jsData.utils.classCallCheck(this, HttpAdapter); + opts || (opts = {}); + // Fill in any missing options with the defaults jsData.utils.fillIn(opts, DEFAULTS); - jsDataAdapter.Adapter.call(self, opts); + jsDataAdapter.Adapter.call(this, opts); } /** @@ -139,46 +139,9 @@ function HttpAdapter(opts) { * @see HttpAdapter */ -// Setup prototype inheritance from Adapter -HttpAdapter.prototype = Object.create(jsDataAdapter.Adapter.prototype, { - constructor: { - value: HttpAdapter, - enumerable: false, - writable: true, - configurable: true - } -}); - -Object.defineProperty(HttpAdapter, '__super__', { - configurable: true, - value: jsDataAdapter.Adapter -}); - -/** - * Alternative to ES6 class syntax for extending `HttpAdapter`. - * - * @example Using the ES2015 class syntax. - * class MyHttpAdapter extends HttpAdapter {...} - * const adapter = new MyHttpAdapter() - * - * @example Using {@link HttpAdapter.extend}. - * var instanceProps = {...} - * var classProps = {...} - * - * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps) - * var adapter = new MyHttpAdapter() - * - * @name HttpAdapter.extend - * @method - * @param {Object} [instanceProps] Properties that will be added to the - * prototype of the subclass. - * @param {Object} [classProps] Properties that will be added as static - * properties to the subclass itself. - * @return {Object} Subclass of `HttpAdapter`. - */ -HttpAdapter.extend = jsData.utils.extend; +jsDataAdapter.Adapter.extend({ + constructor: HttpAdapter, -jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { /** * @name HttpAdapter#afterDEL * @method @@ -277,72 +240,83 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { beforePUT: jsDataAdapter.noop, _count: function _count(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this = this; + + return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return _this._end(mapper, opts, response); }); }, _create: function _create(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('create', mapper, props, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this2 = this; + + return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this2._end(mapper, opts, response); }); }, _createMany: function _createMany(mapper, props, opts) { - var self = this; - return self.POST(self.getPath('createMany', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this3 = this; + + return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this3._end(mapper, opts, response); }); }, _destroy: function _destroy(mapper, id, opts) { - var self = this; - return self.DEL(self.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this4 = this; + + return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return _this4._end(mapper, opts, response); }); }, _destroyAll: function _destroyAll(mapper, query, opts) { - var self = this; - return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this5 = this; + + return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return _this5._end(mapper, opts, response); }); }, _end: function _end(mapper, opts, response) { return [this.deserialize(mapper, response, opts), response]; }, _find: function _find(mapper, id, opts) { - var self = this; - return self.GET(self.getPath('find', mapper, id, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this6 = this; + + return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { + return _this6._end(mapper, opts, response); }); }, _findAll: function _findAll(mapper, query, opts) { - var self = this; - return self.GET(self.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this7 = this; + + return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return _this7._end(mapper, opts, response); }); }, _sum: function _sum(mapper, field, query, opts) { - var self = this; - return self.GET(self.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this8 = this; + + return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return _this8._end(mapper, opts, response); }); }, _update: function _update(mapper, id, props, opts) { - var self = this; - return self.PUT(self.getPath('update', mapper, id, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this9 = this; + + return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this9._end(mapper, opts, response); }); }, _updateAll: function _updateAll(mapper, props, query, opts) { - var self = this; - return self.PUT(self.getPath('updateAll', mapper, null, opts), self.serialize(mapper, props, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this10 = this; + + return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this10._end(mapper, opts, response); }); }, _updateMany: function _updateMany(mapper, records, opts) { - var self = this; - return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts).then(function (response) { - return self._end(mapper, opts, response); + var _this11 = this; + + return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { + return _this11._end(mapper, opts, response); }); }, @@ -360,16 +334,14 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ count: function count(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.count = true; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.count.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return jsDataAdapter.Adapter.prototype.count.call(this, mapper, query, opts); }, @@ -386,13 +358,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ create: function create(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.create.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.create.call(this, mapper, props, opts); }, @@ -409,13 +379,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ createMany: function createMany(mapper, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.createMany.call(self, mapper, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.createMany.call(this, mapper, props, opts); }, @@ -431,7 +399,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ DEL: function DEL(url, config, opts) { - var self = this; + var _this12 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -440,18 +409,17 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { // beforeDEL lifecycle hook op = opts.op = 'beforeDEL'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'DEL'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this12.dbg(op, url, config, opts); + return _this12.HTTP(config, opts); }).then(function (response) { // afterDEL lifecycle hook op = opts.op = 'afterDEL'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -496,13 +464,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ destroy: function destroy(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroy.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.destroy.call(this, mapper, id, opts); }, @@ -519,15 +485,13 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.destroyAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.destroyAll.call(this, mapper, query, opts); }, @@ -607,13 +571,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ find: function find(mapper, id, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.find.call(self, mapper, id, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.find.call(this, mapper, id, opts); }, @@ -630,15 +592,13 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ findAll: function findAll(mapper, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); - opts.suffix = self.getSuffix(mapper, opts); + opts.params = this.getParams(opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.findAll.call(self, mapper, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return jsDataAdapter.Adapter.prototype.findAll.call(this, mapper, query, opts); }, @@ -653,7 +613,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ GET: function GET(url, config, opts) { - var self = this; + var _this13 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -662,18 +623,17 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { // beforeGET lifecycle hook op = opts.op = 'beforeGET'; - return jsData.utils.resolve(self[op](url, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'GET'; - self.dbg(op, url, config, opts); - return self.HTTP(config, opts); + _this13.dbg(op, url, config, opts); + return _this13.HTTP(config, opts); }).then(function (response) { // afterGET lifecycle hook op = opts.op = 'afterGET'; - return jsData.utils.resolve(self[op](url, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -688,7 +648,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var self = this; + var _this14 = this; + opts || (opts = {}); opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; var relationList = mapper.relationList || []; @@ -727,13 +688,13 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { _opts[key] = value; }); jsData.utils._(_opts, parentDef); - endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); return { v: false }; }(); - if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v; + if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } } }); @@ -751,9 +712,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { - var self = this; opts || (opts = {}); - var args = [jsData.utils.isUndefined(opts.basePath) ? jsData.utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; if (method === 'find' || method === 'update' || method === 'destroy') { args.push(id); } @@ -761,15 +721,15 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { }, getParams: function getParams(opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.params)) { + if (opts.params === undefined) { return {}; } return jsData.utils.copy(opts.params); }, getSuffix: function getSuffix(mapper, opts) { opts || (opts = {}); - if (jsData.utils.isUndefined(opts.suffix)) { - if (jsData.utils.isUndefined(mapper.suffix)) { + if (opts.suffix === undefined) { + if (mapper.suffix === undefined) { return this.suffix; } return mapper.suffix; @@ -788,56 +748,57 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ HTTP: function HTTP(config, opts) { - var self = this; + var _this15 = this; + var start = new Date(); opts || (opts = {}); var payload = config.data; var cache = config.cache; var timeout = config.timeout; config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = jsData.utils.deepMixIn(config, self.httpConfig); + config = jsData.utils.deepMixIn(config, this.httpConfig); config.data = payload; config.cache = cache; config.timeout = timeout; - if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { config.url += '/'; } config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || self.suffix; + var suffix = config.suffix || opts.suffix || this.suffix; if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { config.url += suffix; } - function logResponse(data) { + var logResponse = function logResponse(data) { var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { - if (self.log) { - self.dbg('debug', str, data); + if (_this15.log) { + _this15.dbg('debug', str, data); } return data; } else { - if (self.error) { - self.error('\'FAILED: ' + str, data); + if (_this15.error) { + _this15.error('\'FAILED: ' + str, data); } return jsData.utils.reject(data); } - } + }; - if (!self.http) { + if (!this.http) { throw new Error('You have not configured this adapter with an http library!'); } - return jsData.utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) { + return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { config = _config || config; - if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) { - return self.fetch(config, opts).then(logResponse, logResponse); + if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { + return _this15.fetch(config, opts).then(logResponse, logResponse); } - return self.http(config).then(logResponse, logResponse).catch(function (err) { - return self.responseError(err, config, opts); + return _this15.http(config).then(logResponse, logResponse).catch(function (err) { + return _this15.responseError(err, config, opts); }); }).then(function (response) { - return jsData.utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) { - return _response || response; + return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -855,7 +816,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ POST: function POST(url, data, config, opts) { - var self = this; + var _this16 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -865,18 +827,17 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { // beforePOST lifecycle hook op = opts.op = 'beforePOST'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'POST'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this16.dbg(op, url, data, config, opts); + return _this16.HTTP(config, opts); }).then(function (response) { // afterPOST lifecycle hook op = opts.op = 'afterPOST'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -894,7 +855,8 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ PUT: function PUT(url, data, config, opts) { - var self = this; + var _this17 = this; + var op = void 0; config || (config = {}); opts || (opts = {}); @@ -904,18 +866,17 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { // beforePUT lifecycle hook op = opts.op = 'beforePUT'; - return jsData.utils.resolve(self[op](url, data, config, opts)).then(function (_config) { + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { // Allow re-assignment from lifecycle hook - config = jsData.utils.isUndefined(_config) ? config : _config; + config = _config === undefined ? config : _config; op = opts.op = 'PUT'; - self.dbg(op, url, data, config, opts); - return self.HTTP(config, opts); + _this17.dbg(op, url, data, config, opts); + return _this17.HTTP(config, opts); }).then(function (response) { // afterPUT lifecycle hook op = opts.op = 'afterPUT'; - return jsData.utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) { - // Allow re-assignment from lifecycle hook - return jsData.utils.isUndefined(_response) ? response : _response; + return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; }); }); }, @@ -997,19 +958,17 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ sum: function sum(mapper, field, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); if (!jsData.utils.utils.isString(field)) { throw new Error('field must be a string!'); } - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); opts.params.sum = field; - opts.suffix = self.getSuffix(mapper, opts); + opts.suffix = this.getSuffix(mapper, opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - - return __super__.sum.call(self, mapper, field, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + return jsDataAdapter.Adapter.prototype.sum.call(this, mapper, field, query, opts); }, @@ -1025,13 +984,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ update: function update(mapper, id, props, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.update.call(self, mapper, id, props, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.update.call(this, mapper, id, props, opts); }, @@ -1047,15 +1004,13 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { - var self = this; query || (query = {}); opts || (opts = {}); - opts.params = self.getParams(opts); + opts.params = this.getParams(opts); jsData.utils.deepMixIn(opts.params, query); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateAll.call(self, mapper, props, query, opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.updateAll.call(this, mapper, props, query, opts); }, @@ -1077,13 +1032,11 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { - var self = this; opts || (opts = {}); - opts.params = self.getParams(opts); - opts.params = self.queryTransform(mapper, opts.params, opts); - opts.suffix = self.getSuffix(mapper, opts); - - return __super__.updateMany.call(self, mapper, records, opts); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return jsDataAdapter.Adapter.prototype.updateMany.call(this, mapper, records, opts); } }); @@ -1132,7 +1085,7 @@ jsData.utils.addHiddenPropsToTarget(HttpAdapter.prototype, { */ function addAction(name, opts) { if (!name || !jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : babelHelpers.typeof(name))); + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); } return function (mapper) { if (mapper[name]) { @@ -1148,21 +1101,22 @@ function addAction(name, opts) { return jsData.utils.reject(err); }; mapper[name] = function (id, _opts) { - var self = this; + var _this18 = this; + if (jsData.utils.isObject(id)) { _opts = id; } _opts = _opts || {}; - var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); var config = {}; jsData.utils.fillIn(config, opts); if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { _opts.endpoint = config.endpoint; } if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(self, _opts); + config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || self.basePath || adapter.basePath, adapter.getEndpoint(self, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } @@ -1170,13 +1124,13 @@ function addAction(name, opts) { config.url = makePath.apply(null, args); } config.method = config.method || 'GET'; - config.mapper = self.name; + config.mapper = this.name; jsData.utils.deepMixIn(config, _opts); return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { - data.config.mapper = self.name; + data.config.mapper = _this18.name; } return data; }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); @@ -1251,42 +1205,13 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - beta: 7, - full: '3.0.0-beta.7', + beta: 8, + full: '3.0.0-beta.8', major: 3, minor: 0, patch: 0 }; -/** - * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` - * that works on Node.js is registered in NPM as `js-data-http-node`. The build - * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower - * as `js-data-fetch`. - * - * @example Script tag - * var HttpAdapter = window.JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * @example CommonJS - * var HttpAdapter = require('js-data-Http').HttpAdapter - * var adapter = new HttpAdapter() - * - * @example ES2015 Modules - * import {HttpAdapter} from 'js-data-Http' - * const adapter = new HttpAdapter() - * - * @example AMD - * define('myApp', ['js-data-Http'], function (JSDataHttp) { - * var HttpAdapter = JSDataHttp.HttpAdapter - * var adapter = new HttpAdapter() - * - * // ... - * }) - * - * @module js-data-http - */ - exports.HttpAdapter = HttpAdapter; exports.addAction = addAction; exports.addActions = addActions; diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index d5569ff..babfd1c 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"file":"js-data-http-node.js","sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst __super__ = Adapter.prototype\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n const self = this\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(self, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\n// Setup prototype inheritance from Adapter\nHttpAdapter.prototype = Object.create(Adapter.prototype, {\n constructor: {\n value: HttpAdapter,\n enumerable: false,\n writable: true,\n configurable: true\n }\n})\n\nObject.defineProperty(HttpAdapter, '__super__', {\n configurable: true,\n value: Adapter\n})\n\n/**\n * Alternative to ES6 class syntax for extending `HttpAdapter`.\n *\n * @example Using the ES2015 class syntax.\n * class MyHttpAdapter extends HttpAdapter {...}\n * const adapter = new MyHttpAdapter()\n *\n * @example Using {@link HttpAdapter.extend}.\n * var instanceProps = {...}\n * var classProps = {...}\n *\n * var MyHttpAdapter = HttpAdapter.extend(instanceProps, classProps)\n * var adapter = new MyHttpAdapter()\n *\n * @name HttpAdapter.extend\n * @method\n * @param {Object} [instanceProps] Properties that will be added to the\n * prototype of the subclass.\n * @param {Object} [classProps] Properties that will be added as static\n * properties to the subclass itself.\n * @return {Object} Subclass of `HttpAdapter`.\n */\nHttpAdapter.extend = utils.extend\n\nutils.addHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('count', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _create (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _createMany (mapper, props, opts) {\n const self = this\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroy (mapper, id, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _destroyAll (mapper, query, opts) {\n const self = this\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n const self = this\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _findAll (mapper, query, opts) {\n const self = this\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _sum (mapper, field, query, opts) {\n const self = this\n return self.GET(\n self.getPath('sum', mapper, opts.params, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _update (mapper, id, props, opts) {\n const self = this\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateAll (mapper, props, query, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n _updateMany (mapper, records, opts) {\n const self = this\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n ).then(function (response) {\n return self._end(mapper, opts, response)\n })\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params.count = true\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.count.call(self, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.create.call(self, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.createMany.call(self, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'DEL'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroy.call(self, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.destroyAll.call(self, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json().then(function (data) {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.find.call(self, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.findAll.call(self, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'GET'\n self.dbg(op, url, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n const self = this\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach(function (def) {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n const self = this\n opts || (opts = {})\n const args = [\n utils.isUndefined(opts.basePath) ? (utils.isUndefined(mapper.basePath) ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.params)) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (utils.isUndefined(opts.suffix)) {\n if (utils.isUndefined(mapper.suffix)) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const self = this\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, self.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || self.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n function logResponse (data) {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (self.log) {\n self.dbg('debug', str, data)\n }\n return data\n } else {\n if (self.error) {\n self.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!self.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(self.beforeHTTP(config, opts)).then(function (_config) {\n config = _config || config\n if (hasFetch && (self.useFetch || opts.useFetch || !self.http)) {\n return self.fetch(config, opts).then(logResponse, logResponse)\n }\n return self.http(config).then(logResponse, logResponse).catch(function (err) {\n return self.responseError(err, config, opts)\n })\n }).then(function (response) {\n return utils.resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'POST'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n const self = this\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = utils.isUndefined(_config) ? config : _config\n op = opts.op = 'PUT'\n self.dbg(op, url, data, config, opts)\n return self.HTTP(config, opts)\n }).then(function (response) {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return utils.isUndefined(_response) ? response : _response\n })\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = self.getParams(opts)\n opts.params.sum = field\n opts.suffix = self.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n return __super__.sum.call(self, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.update.call(self, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n const self = this\n query || (query = {})\n opts || (opts = {})\n opts.params = self.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateAll.call(self, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n const self = this\n opts || (opts = {})\n opts.params = self.getParams(opts)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = self.getSuffix(mapper, opts)\n\n return __super__.updateMany.call(self, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(self, _opts)\n } else {\n let args = [\n _opts.basePath || self.basePath || adapter.basePath,\n adapter.getEndpoint(self, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = self.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then(function (config) { return adapter.HTTP(config) })\n .then(function (data) {\n if (data && data.config) {\n data.config.mapper = self.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file From a772d6ea85835e9811bb9ef9a22abb16da22ba51 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 10 Aug 2016 23:12:09 -0700 Subject: [PATCH 07/10] 3.0.0-rc.1 --- dist/js-data-http.js | 1138 ++++++++++++++++------------ dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 21 +- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 5 +- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 661 insertions(+), 523 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index a537a72..243b506 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-beta.8 - Homepage +* @version 3.0.0-rc.1 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -14,12 +14,16 @@ var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {} + function interopDefault(ex) { + return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex; + } + function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var axios = createCommonjsModule(function (module, exports) { - /* axios v0.12.0 | (c) 2016 by Matt Zabriskie */ + /* axios v0.13.1 | (c) 2016 by Matt Zabriskie */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -84,127 +88,45 @@ 'use strict'; - var defaults = __webpack_require__(2); - var utils = __webpack_require__(3); - var dispatchRequest = __webpack_require__(5); - var InterceptorManager = __webpack_require__(14); - var isAbsoluteURL = __webpack_require__(15); - var combineURLs = __webpack_require__(16); - var bind = __webpack_require__(17); - var transformData = __webpack_require__(9); - - function Axios(defaultConfig) { - this.defaults = utils.merge({}, defaultConfig); - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; - } - - Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = utils.merge({ - url: arguments[0] - }, arguments[1]); - } - - config = utils.merge(defaults, this.defaults, { method: 'get' }, config); - - // Support baseURL config - if (config.baseURL && !isAbsoluteURL(config.url)) { - config.url = combineURLs(config.baseURL, config.url); - } - - // Don't allow overriding defaults.withCredentials - config.withCredentials = config.withCredentials || this.defaults.withCredentials; - - // Transform request data - config.data = transformData( - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers || {} - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - - // Hook up interceptors middleware - var chain = [dispatchRequest, undefined]; - var promise = Promise.resolve(config); + var utils = __webpack_require__(2); + var bind = __webpack_require__(3); + var Axios = __webpack_require__(4); - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - chain.unshift(interceptor.fulfilled, interceptor.rejected); - }); + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - chain.push(interceptor.fulfilled, interceptor.rejected); - }); + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context); - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } + // Copy context to instance + utils.extend(instance, context); - return promise; - }; + return instance; + } - var defaultInstance = new Axios(defaults); - var axios = module.exports = bind(Axios.prototype.request, defaultInstance); - axios.request = bind(Axios.prototype.request, defaultInstance); + // Create the default instance to be exported + var axios = module.exports = createInstance(); // Expose Axios class to allow class inheritance axios.Axios = Axios; - // Expose properties from defaultInstance - axios.defaults = defaultInstance.defaults; - axios.interceptors = defaultInstance.interceptors; - // Factory for creating new instances axios.create = function create(defaultConfig) { - return new Axios(defaultConfig); + return createInstance(defaultConfig); }; // Expose all/spread axios.all = function all(promises) { return Promise.all(promises); }; - axios.spread = __webpack_require__(18); - - // Provide aliases for supported request methods - utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url - })); - }; - axios[method] = bind(Axios.prototype[method], defaultInstance); - }); - - utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url, - data: data - })); - }; - axios[method] = bind(Axios.prototype[method], defaultInstance); - }); + axios.spread = __webpack_require__(21); /***/ }, @@ -213,83 +135,7 @@ 'use strict'; - var utils = __webpack_require__(3); - var normalizeHeaderName = __webpack_require__(4); - - var PROTECTION_PREFIX = /^\)\]\}',?\n/; - var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - - function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } - } - - module.exports = { - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Content-Type'); - if (utils.isFormData(data) || - utils.isArrayBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) - ) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - if (utils.isObject(data)) { - setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); - return JSON.stringify(data); - } - return data; - }], - - transformResponse: [function transformResponse(data) { - /*eslint no-param-reassign:0*/ - if (typeof data === 'string') { - data = data.replace(PROTECTION_PREFIX, ''); - try { - data = JSON.parse(data); - } catch (e) { /* Ignore */ } - } - return data; - }], - - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - patch: utils.merge(DEFAULT_CONTENT_TYPE), - post: utils.merge(DEFAULT_CONTENT_TYPE), - put: utils.merge(DEFAULT_CONTENT_TYPE) - }, - - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - } - }; - - - /***/ }, - /* 3 */ - /***/ function(module, exports) { - - 'use strict'; + var bind = __webpack_require__(3); /*global toString:true*/ @@ -546,6 +392,25 @@ return result; } + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ + function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; + } + module.exports = { isArray: isArray, isArrayBuffer: isArrayBuffer, @@ -564,243 +429,632 @@ isStandardBrowserEnv: isStandardBrowserEnv, forEach: forEach, merge: merge, + extend: extend, trim: trim }; /***/ }, - /* 4 */ - /***/ function(module, exports, __webpack_require__) { + /* 3 */ + /***/ function(module, exports) { 'use strict'; - var utils = __webpack_require__(3); - - module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; + module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; } - }); + return fn.apply(thisArg, args); + }; }; /***/ }, - /* 5 */ + /* 4 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; + var defaults = __webpack_require__(5); + var utils = __webpack_require__(2); + var InterceptorManager = __webpack_require__(7); + var dispatchRequest = __webpack_require__(8); + var isAbsoluteURL = __webpack_require__(19); + var combineURLs = __webpack_require__(20); + /** - * Dispatch a request to the server using whichever adapter - * is supported by the current environment. + * Create a new instance of Axios * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled + * @param {Object} defaultConfig The default config for the instance */ - module.exports = function dispatchRequest(config) { - return new Promise(function executor(resolve, reject) { - try { - var adapter; - - if (typeof config.adapter === 'function') { - // For custom adapter support - adapter = config.adapter; - } else if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __webpack_require__(6); - } else if (typeof process !== 'undefined') { - // For node use HTTP adapter - adapter = __webpack_require__(6); - } - - if (typeof adapter === 'function') { - adapter(resolve, reject, config); - } - } catch (e) { - reject(e); - } - }); - }; - - - - /***/ }, - /* 6 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(3); - var buildURL = __webpack_require__(7); - var parseHeaders = __webpack_require__(8); - var transformData = __webpack_require__(9); - var isURLSameOrigin = __webpack_require__(10); - var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(11); - var settle = __webpack_require__(12); - - module.exports = function xhrAdapter(resolve, reject, config) { - var requestData = config.data; - var requestHeaders = config.headers; + function Axios(defaultConfig) { + this.defaults = utils.merge(defaults, defaultConfig); + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it + /** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ + Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = utils.merge({ + url: arguments[0] + }, arguments[1]); } - var request = new XMLHttpRequest(); - var loadEvent = 'onreadystatechange'; - var xDomain = false; - - // For IE 8/9 CORS support - // Only supports POST and GET calls and doesn't returns the response headers. - // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. - if (("production") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { - request = new window.XDomainRequest(); - loadEvent = 'onload'; - xDomain = true; - request.onprogress = function handleProgress() {}; - request.ontimeout = function handleTimeout() {}; - } + config = utils.merge(defaults, this.defaults, { method: 'get' }, config); - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password || ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + // Support baseURL config + if (config.baseURL && !isAbsoluteURL(config.url)) { + config.url = combineURLs(config.baseURL, config.url); } - request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); - // Listen for ready state - request[loadEvent] = function handleLoad() { - if (!request || (request.readyState !== 4 && !xDomain)) { - return; - } + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - if (request.status === 0) { - return; - } + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; - var response = { - data: transformData( - responseData, - responseHeaders, - config.transformResponse - ), - // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) - status: request.status === 1223 ? 204 : request.status, - statusText: request.status === 1223 ? 'No Content' : request.statusText, - headers: responseHeaders, - config: config, - request: request - }; + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } - settle(resolve, reject, response); + return promise; + }; - // Clean up request - request = null; + // Provide aliases for supported request methods + utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url + })); }; + }); - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(new Error('Network Error')); - - // Clean up request - request = null; + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(utils.merge(config || {}, { + method: method, + url: url, + data: data + })); }; + }); - // Handle timeout - request.ontimeout = function handleTimeout() { - var err = new Error('timeout of ' + config.timeout + 'ms exceeded'); - err.timeout = config.timeout; - err.code = 'ECONNABORTED'; - reject(err); + module.exports = Axios; + + + /***/ }, + /* 5 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; - // Clean up request - request = null; - }; + var utils = __webpack_require__(2); + var normalizeHeaderName = __webpack_require__(6); - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - var cookies = __webpack_require__(13); + var PROTECTION_PREFIX = /^\)\]\}',?\n/; + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; - // Add xsrf header - var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? - cookies.read(config.xsrfCookieName) : - undefined; + function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } + } - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; + module.exports = { + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Content-Type'); + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); } + if (utils.isObject(data)) { + setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + data = data.replace(PROTECTION_PREFIX, ''); + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + patch: utils.merge(DEFAULT_CONTENT_TYPE), + post: utils.merge(DEFAULT_CONTENT_TYPE), + put: utils.merge(DEFAULT_CONTENT_TYPE) + }, + + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; } + }; + + + /***/ }, + /* 6 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); + var utils = __webpack_require__(2); + + module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); + }; + + + /***/ }, + /* 7 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; } + }; - // Add withCredentials to request if needed - if (config.withCredentials) { - request.withCredentials = true; + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + module.exports = InterceptorManager; + + + /***/ }, + /* 8 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var transformData = __webpack_require__(9); + + /** + * Dispatch a request to the server using whichever adapter + * is supported by the current environment. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + module.exports = function dispatchRequest(config) { + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers || {} + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter; + + if (typeof config.adapter === 'function') { + // For custom adapter support + adapter = config.adapter; + } else if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(10); + } else if (typeof process !== 'undefined') { + // For node use HTTP adapter + adapter = __webpack_require__(10); } - // Add responseType to request if needed - if (config.responseType) { - try { - request.responseType = config.responseType; - } catch (e) { - if (request.responseType !== 'json') { - throw e; + return Promise.resolve(config) + // Wrap synchronous adapter errors and pass configuration + .then(adapter) + .then(function onFulfilled(response) { + // Transform response data + response.data = transformData( + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onRejected(error) { + // Transform response data + if (error && error.response) { + error.response.data = transformData( + error.response.data, + error.response.headers, + config.transformResponse + ); + } + + return Promise.reject(error); + }); + }; + + + /***/ }, + /* 9 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; + }; + + + /***/ }, + /* 10 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils = __webpack_require__(2); + var settle = __webpack_require__(11); + var buildURL = __webpack_require__(14); + var parseHeaders = __webpack_require__(15); + var isURLSameOrigin = __webpack_require__(16); + var createError = __webpack_require__(12); + var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17); + + module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + var loadEvent = 'onreadystatechange'; + var xDomain = false; + + // For IE 8/9 CORS support + // Only supports POST and GET calls and doesn't returns the response headers. + // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. + if (("production") !== 'test' && + typeof window !== 'undefined' && + window.XDomainRequest && !('withCredentials' in request) && + !isURLSameOrigin(config.url)) { + request = new window.XDomainRequest(); + loadEvent = 'onload'; + xDomain = true; + request.onprogress = function handleProgress() {}; + request.ontimeout = function handleTimeout() {}; + } + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // Listen for ready state + request[loadEvent] = function handleLoad() { + if (!request || (request.readyState !== 4 && !xDomain)) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + if (request.status === 0) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: responseData, + // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) + status: request.status === 1223 ? 204 : request.status, + statusText: request.status === 1223 ? 'No Content' : request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(createError('Network Error', config)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED')); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + var cookies = __webpack_require__(18); + + // Add xsrf header + var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; } } - } - // Handle progress if needed - if (config.progress) { - if (config.method === 'post' || config.method === 'put') { - request.upload.addEventListener('progress', config.progress); - } else if (config.method === 'get') { - request.addEventListener('progress', config.progress); + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (config.withCredentials) { + request.withCredentials = true; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + if (request.responseType !== 'json') { + throw e; + } + } } - } - if (requestData === undefined) { - requestData = null; + // Handle progress if needed + if (typeof config.progress === 'function') { + if (config.method === 'post' || config.method === 'put') { + request.upload.addEventListener('progress', config.progress); + } else if (config.method === 'get') { + request.addEventListener('progress', config.progress); + } + } + + if (requestData === undefined) { + requestData = null; + } + + // Send the request + request.send(requestData); + }); + }; + + + /***/ }, + /* 11 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var createError = __webpack_require__(12); + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + // Note: status is not exposed by XDomainRequest + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(createError( + 'Request failed with status code ' + response.status, + response.config, + null, + response + )); } + }; + + + /***/ }, + /* 12 */ + /***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var enhanceError = __webpack_require__(13); - // Send the request - request.send(requestData); + /** + * Create an Error with the specified message, config, error code, and response. + * + * @param {string} message The error message. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + @ @param {Object} [response] The response. + * @returns {Error} The created error. + */ + module.exports = function createError(message, config, code, response) { + var error = new Error(message); + return enhanceError(error, config, code, response); }; /***/ }, - /* 7 */ + /* 13 */ + /***/ function(module, exports) { + + 'use strict'; + + /** + * Update an Error with the specified config, error code, and response. + * + * @param {Error} error The error to update. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + @ @param {Object} [response] The response. + * @returns {Error} The error. + */ + module.exports = function enhanceError(error, config, code, response) { + error.config = config; + if (code) { + error.code = code; + } + error.response = response; + return error; + }; + + + /***/ }, + /* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var utils = __webpack_require__(3); + var utils = __webpack_require__(2); function encode(val) { return encodeURIComponent(val). @@ -869,12 +1123,12 @@ /***/ }, - /* 8 */ + /* 15 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var utils = __webpack_require__(3); + var utils = __webpack_require__(2); /** * Parse headers into an object @@ -912,38 +1166,12 @@ /***/ }, - /* 9 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(3); - - /** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ - module.exports = function transformData(data, headers, fns) { - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn(data, headers); - }); - - return data; - }; - - - /***/ }, - /* 10 */ + /* 16 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var utils = __webpack_require__(3); + var utils = __webpack_require__(2); module.exports = ( utils.isStandardBrowserEnv() ? @@ -1012,7 +1240,7 @@ /***/ }, - /* 11 */ + /* 17 */ /***/ function(module, exports) { 'use strict'; @@ -1054,36 +1282,12 @@ /***/ }, - /* 12 */ - /***/ function(module, exports) { - - 'use strict'; - - /** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ - module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - // Note: status is not exposed by XDomainRequest - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(response); - } - }; - - - /***/ }, - /* 13 */ + /* 18 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var utils = __webpack_require__(3); + var utils = __webpack_require__(2); module.exports = ( utils.isStandardBrowserEnv() ? @@ -1137,65 +1341,7 @@ /***/ }, - /* 14 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(3); - - function InterceptorManager() { - this.handlers = []; - } - - /** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ - InterceptorManager.prototype.use = function use(fulfilled, rejected) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected - }); - return this.handlers.length - 1; - }; - - /** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ - InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } - }; - - /** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ - InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); - }; - - module.exports = InterceptorManager; - - - /***/ }, - /* 15 */ + /* 19 */ /***/ function(module, exports) { 'use strict'; @@ -1215,7 +1361,7 @@ /***/ }, - /* 16 */ + /* 20 */ /***/ function(module, exports) { 'use strict'; @@ -1233,24 +1379,7 @@ /***/ }, - /* 17 */ - /***/ function(module, exports) { - - 'use strict'; - - module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; - }; - - - /***/ }, - /* 18 */ + /* 21 */ /***/ function(module, exports) { 'use strict'; @@ -1288,7 +1417,7 @@ ; }); - var axios$1 = (axios && typeof axios === 'object' && 'default' in axios ? axios['default'] : axios); + var axios$1 = interopDefault(axios); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; @@ -2240,6 +2369,7 @@ var record = void 0, op = void 0; + var meta = {}; opts || (opts = {}); opts.with || (opts.with = []); @@ -2250,14 +2380,16 @@ _this7.dbg(op, mapper, id, opts); return jsData.utils.resolve(_this7._find(mapper, id, opts)); }).then(function (results) { - var _results6 = slicedToArray(results, 1); + var _results6 = slicedToArray(results, 2); var _record = _results6[0]; + var _meta = _results6[1]; if (!_record) { return; } record = _record; + meta = _meta; var tasks = []; jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { @@ -2282,7 +2414,7 @@ return jsData.utils.Promise.all(tasks); }).then(function () { - var response = new Response(record, {}, 'find'); + var response = new Response(record, meta, 'find'); response.found = record ? 1 : 0; response = _this7.respond(response, opts); @@ -2321,6 +2453,7 @@ opts.with || (opts.with = []); var records = []; + var meta = {}; var op = void 0; var activeWith = opts._activeWith; @@ -2340,12 +2473,14 @@ _this8.dbg(op, mapper, query, opts); return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); }).then(function (results) { - var _results7 = slicedToArray(results, 1); + var _results7 = slicedToArray(results, 2); var _records = _results7[0]; + var _meta = _results7[1]; _records || (_records = []); records = _records; + meta = _meta; var tasks = []; jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { var task = void 0; @@ -2368,7 +2503,7 @@ }); return jsData.utils.Promise.all(tasks); }).then(function () { - var response = new Response(records, {}, 'findAll'); + var response = new Response(records, meta, 'findAll'); response.found = records.length; response = _this8.respond(response, opts); @@ -4057,8 +4192,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 8, - full: '3.0.0-beta.8', + full: '3.0.0-rc.1', major: 3, minor: 0, patch: 0 @@ -4072,4 +4206,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=js-data-http.js.map \ No newline at end of file +//# sourceMappingURL=js-data-http.js.map diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 08154b3..df9b8b5 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.12.0 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar dispatchRequest = __webpack_require__(5);\n\tvar InterceptorManager = __webpack_require__(14);\n\tvar isAbsoluteURL = __webpack_require__(15);\n\tvar combineURLs = __webpack_require__(16);\n\tvar bind = __webpack_require__(17);\n\tvar transformData = __webpack_require__(9);\n\t\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge({}, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Don't allow overriding defaults.withCredentials\n\t config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\tvar defaultInstance = new Axios(defaults);\n\tvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\taxios.request = bind(Axios.prototype.request, defaultInstance);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Expose properties from defaultInstance\n\taxios.defaults = defaultInstance.defaults;\n\taxios.interceptors = defaultInstance.interceptors;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return new Axios(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(18);\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t axios[method] = bind(Axios.prototype[method], defaultInstance);\n\t});\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar normalizeHeaderName = __webpack_require__(4);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t return new Promise(function executor(resolve, reject) {\n\t try {\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(6);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(6);\n\t }\n\t\n\t if (typeof adapter === 'function') {\n\t adapter(resolve, reject, config);\n\t }\n\t } catch (e) {\n\t reject(e);\n\t }\n\t });\n\t};\n\t\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar buildURL = __webpack_require__(7);\n\tvar parseHeaders = __webpack_require__(8);\n\tvar transformData = __webpack_require__(9);\n\tvar isURLSameOrigin = __webpack_require__(10);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(11);\n\tvar settle = __webpack_require__(12);\n\t\n\tmodule.exports = function xhrAdapter(resolve, reject, config) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: transformData(\n\t responseData,\n\t responseHeaders,\n\t config.transformResponse\n\t ),\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(new Error('Network Error'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n\t err.timeout = config.timeout;\n\t err.code = 'ECONNABORTED';\n\t reject(err);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(13);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (config.progress) {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(response);\n\t }\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":";;;;;;;;;;;;;AAAA,CAAA;AACA,CAAA,CAAC,SAAS,gCAAgC,CAAC,IAAI,EAAE,OAAO,EAAE;EACzD,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;GAC3D,MAAM,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;OACvB,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG;GACjD,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;OAChB,GAAG,OAAO,OAAO,KAAK,QAAQ;GAClC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;;GAE7B,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;EAC3B,EAAEA,cAAI,EAAE,WAAW;AACpB,CAAA,gBAAgB,CAAC,SAAS,OAAO,EAAE;;WAEzB,IAAI,gBAAgB,GAAG,EAAE,CAAC;;;WAG1B,SAAS,mBAAmB,CAAC,QAAQ,EAAE;;;YAGtC,GAAG,gBAAgB,CAAC,QAAQ,CAAC;aAC5B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;;;YAG3C,IAAI,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG;aACzC,OAAO,EAAE,EAAE;aACX,EAAE,EAAE,QAAQ;aACZ,MAAM,EAAE,KAAK;aACb,CAAC;;;YAGF,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;;;YAGpF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;;;YAGrB,OAAO,MAAM,CAAC,OAAO,CAAC;YACtB;;;;WAID,mBAAmB,CAAC,CAAC,GAAG,OAAO,CAAC;;;WAGhC,mBAAmB,CAAC,CAAC,GAAG,gBAAgB,CAAC;;;WAGzC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;;;WAG3B,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;WAC9B;;WAEA;;OAEJ,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,MAAM,CAAC,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;QAElC;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,eAAe,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EAC7C,IAAI,kBAAkB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;EACjD,IAAI,aAAa,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;EAC5C,IAAI,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;EAC1C,IAAI,IAAI,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;EACnC,IAAI,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAE3C,SAAS,KAAK,CAAC,aAAa,EAAE;IAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,YAAY,GAAG;MAClB,OAAO,EAAE,IAAI,kBAAkB,EAAE;MACjC,QAAQ,EAAE,IAAI,kBAAkB,EAAE;KACnC,CAAC;GACH;;EAED,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,MAAM,EAAE;;;IAGjD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;MAC9B,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QACnB,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;OAClB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAClB;;IAED,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;;;IAGzE,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;MAChD,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;KACtD;;;IAGD,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;;;IAGjF,MAAM,CAAC,IAAI,GAAG,aAAa;MACzB,MAAM,CAAC,IAAI;MACX,MAAM,CAAC,OAAO;MACd,MAAM,CAAC,gBAAgB;KACxB,CAAC;;;IAGF,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK;MAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE;MAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;MACnC,MAAM,CAAC,OAAO,IAAI,EAAE;KACrB,CAAC;;IAEF,KAAK,CAAC,OAAO;MACX,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;MAC3D,SAAS,iBAAiB,CAAC,MAAM,EAAE;QACjC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC/B;KACF,CAAC;;;IAGF,IAAI,KAAK,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;IAEtC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,0BAA0B,CAAC,WAAW,EAAE;MACjF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC5D,CAAC,CAAC;;IAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,wBAAwB,CAAC,WAAW,EAAE;MAChF,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;KACzD,CAAC,CAAC;;IAEH,OAAO,KAAK,CAAC,MAAM,EAAE;MACnB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KACtD;;IAED,OAAO,OAAO,CAAC;GAChB,CAAC;;EAEF,IAAI,eAAe,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;EAC1C,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;EAC5E,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;;;EAG/D,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;;;EAGpB,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;EAC1C,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;;;EAGlD,KAAK,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,aAAa,EAAE;IAC5C,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;GACjC,CAAC;;;EAGF,KAAK,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,QAAQ,EAAE;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;GAC9B,CAAC;EACF,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;;;EAGvC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,SAAS,mBAAmB,CAAC,MAAM,EAAE;;IAE5E,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE,MAAM,EAAE;MAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;QAC5C,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG;OACT,CAAC,CAAC,CAAC;KACL,CAAC;IACF,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC;GAChE,CAAC,CAAC;;EAEH,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,qBAAqB,CAAC,MAAM,EAAE;;IAE7E,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;MACpD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;QAC5C,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;OACX,CAAC,CAAC,CAAC;KACL,CAAC;IACF,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC;GAChE,CAAC,CAAC;;;QAGG;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,mBAAmB,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEjD,IAAI,iBAAiB,GAAG,cAAc,CAAC;EACvC,IAAI,oBAAoB,GAAG;IACzB,cAAc,EAAE,mCAAmC;GACpD,CAAC;;EAEF,SAAS,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE;IAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE;MAC7E,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;KACjC;GACF;;EAED,MAAM,CAAC,OAAO,GAAG;IACf,gBAAgB,EAAE,CAAC,SAAS,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE;MAC1D,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;MAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACxB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB;QACA,OAAO,IAAI,CAAC;OACb;MACD,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC;OACpB;MACD,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;QACjC,qBAAqB,CAAC,OAAO,EAAE,iDAAiD,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;OACxB;MACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACxB,qBAAqB,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;OAC7B;MACD,OAAO,IAAI,CAAC;KACb,CAAC;;IAEF,iBAAiB,EAAE,CAAC,SAAS,iBAAiB,CAAC,IAAI,EAAE;;MAEnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI;UACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB,CAAC,OAAO,CAAC,EAAE,gBAAgB;OAC7B;MACD,OAAO,IAAI,CAAC;KACb,CAAC;;IAEF,OAAO,EAAE;MACP,MAAM,EAAE;QACN,QAAQ,EAAE,mCAAmC;OAC9C;MACD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC;MACxC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC;MACvC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC;KACvC;;IAED,OAAO,EAAE,CAAC;;IAEV,cAAc,EAAE,YAAY;IAC5B,cAAc,EAAE,cAAc;;IAE9B,gBAAgB,EAAE,CAAC,CAAC;;IAEpB,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE;MAC9C,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;KACtC;GACF,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;;;EAMb,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;;;EAQzC,SAAS,OAAO,CAAC,GAAG,EAAE;IACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC;GAChD;;;;;;;;EAQD,SAAS,aAAa,CAAC,GAAG,EAAE;IAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,sBAAsB,CAAC;GACtD;;;;;;;;EAQD,SAAS,UAAU,CAAC,GAAG,EAAE;IACvB,OAAO,CAAC,OAAO,QAAQ,KAAK,WAAW,MAAM,GAAG,YAAY,QAAQ,CAAC,CAAC;GACvE;;;;;;;;EAQD,SAAS,iBAAiB,CAAC,GAAG,EAAE;IAC9B,IAAI,MAAM,CAAC;IACX,IAAI,CAAC,OAAO,WAAW,KAAK,WAAW,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE;MAChE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAClC,MAAM;MACL,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC;KACvE;IACD,OAAO,MAAM,CAAC;GACf;;;;;;;;EAQD,SAAS,QAAQ,CAAC,GAAG,EAAE;IACrB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;GAChC;;;;;;;;EAQD,SAAS,QAAQ,CAAC,GAAG,EAAE;IACrB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;GAChC;;;;;;;;EAQD,SAAS,WAAW,CAAC,GAAG,EAAE;IACxB,OAAO,OAAO,GAAG,KAAK,WAAW,CAAC;GACnC;;;;;;;;EAQD,SAAS,QAAQ,CAAC,GAAG,EAAE;IACrB,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;GAChD;;;;;;;;EAQD,SAAS,MAAM,CAAC,GAAG,EAAE;IACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC;GAC/C;;;;;;;;EAQD,SAAS,MAAM,CAAC,GAAG,EAAE;IACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC;GAC/C;;;;;;;;EAQD,SAAS,MAAM,CAAC,GAAG,EAAE;IACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC;GAC/C;;;;;;;;EAQD,SAAS,UAAU,CAAC,GAAG,EAAE;IACvB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,mBAAmB,CAAC;GACnD;;;;;;;;EAQD,SAAS,QAAQ,CAAC,GAAG,EAAE;IACrB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;GAC9C;;;;;;;;EAQD,SAAS,iBAAiB,CAAC,GAAG,EAAE;IAC9B,OAAO,OAAO,eAAe,KAAK,WAAW,IAAI,GAAG,YAAY,eAAe,CAAC;GACjF;;;;;;;;EAQD,SAAS,IAAI,CAAC,GAAG,EAAE;IACjB,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;GACpD;;;;;;;;;;;;;;;EAeD,SAAS,oBAAoB,GAAG;IAC9B;MACE,OAAO,MAAM,KAAK,WAAW;MAC7B,OAAO,QAAQ,KAAK,WAAW;MAC/B,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;MAC5C;GACH;;;;;;;;;;;;;;EAcD,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE;;IAExB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;MAC9C,OAAO;KACR;;;IAGD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;MAE5C,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KACb;;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;;MAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;OAC/B;KACF,MAAM;;MAEL,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;QACnB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;UAC3B,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACnC;OACF;KACF;GACF;;;;;;;;;;;;;;;;;;;EAmBD,SAAS,KAAK,8BAA8B;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;MAC7B,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;OACvC,MAAM;QACL,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;OACnB;KACF;;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAChD,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;KACpC;IACD,OAAO,MAAM,CAAC;GACf;;EAED,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,EAAE,OAAO;IAChB,aAAa,EAAE,aAAa;IAC5B,UAAU,EAAE,UAAU;IACtB,iBAAiB,EAAE,iBAAiB;IACpC,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,QAAQ;IAClB,iBAAiB,EAAE,iBAAiB;IACpC,oBAAoB,EAAE,oBAAoB;IAC1C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;GACX,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEnC,MAAM,CAAC,OAAO,GAAG,SAAS,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE;IACrE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;MACzD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,EAAE;QAClF,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;QAChC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;OACtB;KACF,CAAC,CAAC;GACJ,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;;;;;;;;EASb,MAAM,CAAC,OAAO,GAAG,SAAS,eAAe,CAAC,MAAM,EAAE;IAChD,OAAO,IAAI,OAAO,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;MACpD,IAAI;QACF,IAAI,OAAO,CAAC;;QAEZ,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;;UAExC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;SAC1B,MAAM,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;;UAEhD,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAClC,MAAM,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;;UAEzC,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAClC;;QAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;UACjC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAClC;OACF,CAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,CAAC,CAAC,CAAC;OACX;KACF,CAAC,CAAC;GACJ,CAAC;;;;QAII;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACtC,IAAI,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EAC1C,IAAI,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;EAC3C,IAAI,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;EAC9C,IAAI,IAAI,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,EAAE,CAAC,CAAC;EACrF,IAAI,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;;EAErC,MAAM,CAAC,OAAO,GAAG,SAAS,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;IAC5D,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,IAAI,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;;IAEpC,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;MACjC,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC;KACvC;;IAED,IAAI,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,oBAAoB,CAAC;IACrC,IAAI,OAAO,GAAG,KAAK,CAAC;;;;;IAKpB,IAAI,CAAC,YAAY,MAAM,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,EAAE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;MAC1J,OAAO,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;MACtC,SAAS,GAAG,QAAQ,CAAC;MACrB,OAAO,GAAG,IAAI,CAAC;MACf,OAAO,CAAC,UAAU,GAAG,SAAS,cAAc,GAAG,EAAE,CAAC;MAClD,OAAO,CAAC,SAAS,GAAG,SAAS,aAAa,GAAG,EAAE,CAAC;KACjD;;;IAGD,IAAI,MAAM,CAAC,IAAI,EAAE;MACf,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;MAC1C,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;MAC1C,cAAc,CAAC,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;KAC3E;;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;;;IAG9G,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;;;IAGjC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,UAAU,GAAG;MACzC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACtD,OAAO;OACR;;;;MAID,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO;OACR;;;MAGD,IAAI,eAAe,GAAG,uBAAuB,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,IAAI,CAAC;MAChH,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;MACpH,IAAI,QAAQ,GAAG;QACb,IAAI,EAAE,aAAa;UACjB,YAAY;UACZ,eAAe;UACf,MAAM,CAAC,iBAAiB;SACzB;;QAED,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM;QACtD,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC,UAAU;QACvE,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO;OACjB,CAAC;;MAEF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;;MAGlC,OAAO,GAAG,IAAI,CAAC;KAChB,CAAC;;;IAGF,OAAO,CAAC,OAAO,GAAG,SAAS,WAAW,GAAG;;;MAGvC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;;;MAGnC,OAAO,GAAG,IAAI,CAAC;KAChB,CAAC;;;IAGF,OAAO,CAAC,SAAS,GAAG,SAAS,aAAa,GAAG;MAC3C,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC;MACpE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;MAC7B,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC;MAC1B,MAAM,CAAC,GAAG,CAAC,CAAC;;;MAGZ,OAAO,GAAG,IAAI,CAAC;KAChB,CAAC;;;;;IAKF,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE;MAChC,IAAI,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;;;MAGtC,IAAI,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;UACjE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;UACnC,SAAS,CAAC;;MAEd,IAAI,SAAS,EAAE;QACb,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;OACnD;KACF;;;IAGD,IAAI,kBAAkB,IAAI,OAAO,EAAE;MACjC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE;QAChE,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE;;UAE9E,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B,MAAM;;UAEL,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACpC;OACF,CAAC,CAAC;KACJ;;;IAGD,IAAI,MAAM,CAAC,eAAe,EAAE;MAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;KAChC;;;IAGD,IAAI,MAAM,CAAC,YAAY,EAAE;MACvB,IAAI;QACF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;OAC5C,CAAC,OAAO,CAAC,EAAE;QACV,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;UACnC,MAAM,CAAC,CAAC;SACT;OACF;KACF;;;IAGD,IAAI,MAAM,CAAC,QAAQ,EAAE;MACnB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;QACvD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;OAC9D,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;QAClC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;OACvD;KACF;;IAED,IAAI,WAAW,KAAK,SAAS,EAAE;MAC7B,WAAW,GAAG,IAAI,CAAC;KACpB;;;IAGD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;GAC3B,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEnC,SAAS,MAAM,CAAC,GAAG,EAAE;IACnB,OAAO,kBAAkB,CAAC,GAAG,CAAC;MAC5B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;MACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;MACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;MACpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;MACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;MACpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;MACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;GACzB;;;;;;;;;EASD,MAAM,CAAC,OAAO,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE;;IAEhE,IAAI,CAAC,MAAM,EAAE;MACX,OAAO,GAAG,CAAC;KACZ;;IAED,IAAI,gBAAgB,CAAC;IACrB,IAAI,gBAAgB,EAAE;MACpB,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;KAC7C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;MAC1C,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;KACtC,MAAM;MACL,IAAI,KAAK,GAAG,EAAE,CAAC;;MAEf,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE;QACjD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;UAC9C,OAAO;SACR;;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;UACtB,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;SAClB;;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;UACvB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACb;;QAED,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,UAAU,CAAC,CAAC,EAAE;UACxC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACnB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;WACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC5B,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;WACvB;UACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C,CAAC,CAAC;OACJ,CAAC,CAAC;;MAEH,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpC;;IAED,IAAI,gBAAgB,EAAE;MACpB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,gBAAgB,CAAC;KACjE;;IAED,OAAO,GAAG,CAAC;GACZ,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;EAenC,MAAM,CAAC,OAAO,GAAG,SAAS,YAAY,CAAC,OAAO,EAAE;IAC9C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,CAAC;IACR,IAAI,GAAG,CAAC;IACR,IAAI,CAAC,CAAC;;IAEN,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE;;IAEhC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;MACvD,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;MACtB,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;MAClD,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;MAErC,IAAI,GAAG,EAAE;QACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;OAC5D;KACF,CAAC,CAAC;;IAEH,OAAO,MAAM,CAAC;GACf,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;EAUnC,MAAM,CAAC,OAAO,GAAG,SAAS,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;;IAE1D,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE;MACxC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KAC1B,CAAC,CAAC;;IAEH,OAAO,IAAI,CAAC;GACb,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEnC,MAAM,CAAC,OAAO;IACZ,KAAK,CAAC,oBAAoB,EAAE;;;;IAI5B,CAAC,SAAS,kBAAkB,GAAG;MAC7B,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;MACvD,IAAI,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;MACjD,IAAI,SAAS,CAAC;;;;;;;;MAQd,SAAS,UAAU,CAAC,GAAG,EAAE;QACvB,IAAI,IAAI,GAAG,GAAG,CAAC;;QAEf,IAAI,IAAI,EAAE;;UAER,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;UAC1C,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;SAC5B;;QAED,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;QAG1C,OAAO;UACL,IAAI,EAAE,cAAc,CAAC,IAAI;UACzB,QAAQ,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE;UAClF,IAAI,EAAE,cAAc,CAAC,IAAI;UACzB,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE;UAC7E,IAAI,EAAE,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE;UACtE,QAAQ,EAAE,cAAc,CAAC,QAAQ;UACjC,IAAI,EAAE,cAAc,CAAC,IAAI;UACzB,QAAQ,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;oBAC1C,cAAc,CAAC,QAAQ;oBACvB,GAAG,GAAG,cAAc,CAAC,QAAQ;SACxC,CAAC;OACH;;MAED,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;;;;;MAQ7C,OAAO,SAAS,eAAe,CAAC,UAAU,EAAE;QAC1C,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;QAChF,QAAQ,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;cACxC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;OACvC,CAAC;KACH,GAAG;;;IAGJ,CAAC,SAAS,qBAAqB,GAAG;MAChC,OAAO,SAAS,eAAe,GAAG;QAChC,OAAO,IAAI,CAAC;OACb,CAAC;KACH,GAAG;GACL,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;EAIb,IAAI,KAAK,GAAG,mEAAmE,CAAC;;EAEhF,SAAS,CAAC,GAAG;IACX,IAAI,CAAC,OAAO,GAAG,sCAAsC,CAAC;GACvD;EACD,CAAC,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC;EACxB,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;EACrB,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,uBAAuB,CAAC;;EAE3C,SAAS,IAAI,CAAC,KAAK,EAAE;IACnB,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB;;MAEE,IAAI,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK;;;;MAIzC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;;MAE3C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;MACnD;MACA,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;MACxC,IAAI,QAAQ,GAAG,IAAI,EAAE;QACnB,MAAM,IAAI,CAAC,EAAE,CAAC;OACf;MACD,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC;KAC/B;IACD,OAAO,MAAM,CAAC;GACf;;EAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;;;QAGhB;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;;;;;;EASb,MAAM,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC1D,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;;IAEpD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC1E,OAAO,CAAC,QAAQ,CAAC,CAAC;KACnB,MAAM;MACL,MAAM,CAAC,QAAQ,CAAC,CAAC;KAClB;GACF,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEnC,MAAM,CAAC,OAAO;IACZ,KAAK,CAAC,oBAAoB,EAAE;;;IAG5B,CAAC,SAAS,kBAAkB,GAAG;MAC7B,OAAO;QACL,KAAK,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;UAChE,IAAI,MAAM,GAAG,EAAE,CAAC;UAChB,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;;UAEpD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;WAC3D;;UAED,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;WAC7B;;UAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;WACjC;;UAED,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;WACvB;;UAED,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC;;QAED,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE;UACxB,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;UACjF,QAAQ,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE;SACtD;;QAED,MAAM,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;UAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;SAC7C;OACF,CAAC;KACH,GAAG;;;IAGJ,CAAC,SAAS,qBAAqB,GAAG;MAChC,OAAO;QACL,KAAK,EAAE,SAAS,KAAK,GAAG,EAAE;QAC1B,IAAI,EAAE,SAAS,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC,EAAE;QACtC,MAAM,EAAE,SAAS,MAAM,GAAG,EAAE;OAC7B,CAAC;KACH,GAAG;GACL,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;EAEpD,YAAY,CAAC;;EAEb,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;;EAEnC,SAAS,kBAAkB,GAAG;IAC5B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;GACpB;;;;;;;;;;EAUD,kBAAkB,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE;IACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;MACjB,SAAS,EAAE,SAAS;MACpB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;GACjC,CAAC;;;;;;;EAOF,kBAAkB,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,EAAE,EAAE;IACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;MACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;KAC1B;GACF,CAAC;;;;;;;;;;EAUF,kBAAkB,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,EAAE,EAAE;IAC1D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE;MACtD,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,EAAE,CAAC,CAAC,CAAC,CAAC;OACP;KACF,CAAC,CAAC;GACJ,CAAC;;EAEF,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC;;;QAG9B;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;;;;;EAQb,MAAM,CAAC,OAAO,GAAG,SAAS,aAAa,CAAC,GAAG,EAAE;;;;IAI3C,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAClD,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;;;;;;EASb,MAAM,CAAC,OAAO,GAAG,SAAS,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;GAC5E,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;EAEb,MAAM,CAAC,OAAO,GAAG,SAAS,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;IAC1C,OAAO,SAAS,IAAI,GAAG;MACrB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;MACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;OACxB;MACD,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KAChC,CAAC;GACH,CAAC;;;QAGI;;OAED,SAAS,MAAM,EAAE,OAAO,EAAE;;EAE/B,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;EAsBb,MAAM,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,QAAQ,EAAE;IACzC,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;MACxB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC;GACH,CAAC;;;QAGI;WACG,CAAC;EACV,CAAC,CAAC;AACH,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CChvCM,IAAM,OAAO,SAAP,IAAO,GAAmB;AAAA,CAAA,oCAAN,IAAM;AAAN,CAAA,QAAM;AAAA,CAAA;;AACrC,CAAA,MAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAnB,CAAb;AACA,CAAA,OAAK,GAAL,cAAS,KAAK,EAAd,SAAqB,IAArB;AACA,CAAA,SAAOC,aAAM,OAAN,EAAP;AACD,CAAA,CAJM;;AAMP,AAAO,CAAA,IAAM,QAAQ,SAAR,KAAQ,GAAmB;AAAA,CAAA,qCAAN,IAAM;AAAN,CAAA,QAAM;AAAA,CAAA;;AACtC,CAAA,MAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAnB,CAAb;AACA,CAAA,OAAK,GAAL,cAAS,KAAK,EAAd,SAAqB,IAArB;AACA,CAAA,SAAOA,aAAM,OAAN,EAAP;AACD,CAAA,CAJM;;AAMP,AAAO,CAAA,IAAM,SAAS,SAAT,MAAS,CAAU,KAAV,EAAiB;AACrC,CAAA,MAAM,OAAO,EAAb;AACA,CAAA,MAAM,QAAQ,EAAd;AACA,CAAA,QAAM,OAAN,CAAc,UAAU,IAAV,EAAgB;AAC5B,CAAA,QAAI,QAAQ,IAAZ,EAAkB;AAChB,CAAA;AACD,CAAA;AACD,CAAA,UAAM,IAAN,CAAW,IAAX;AACA,CAAA,SAAK,IAAL,IAAa,CAAb;AACD,CAAA,GAND;AAOA,CAAA,SAAO,KAAP;AACD,CAAA,CAXM;;AAaP,AAAO,CAAA,IAAM,mBAAmB,SAAnB,gBAAmB,CAAU,MAAV,EAAkB,KAAlB,EAAyB,IAAzB,EAA+B;AAC7D,CAAA,WAAS,OAAO,EAAhB;AACA,CAAA,OAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;AACA,CAAA,MAAM,iBAAiB,OAAO,cAAP,IAAyB,EAAhD;AACA,CAAA,MAAM,UAAU,eAAe,MAAf,CAAsB,UAAC,KAAD;AAAA,CAAA,WAAW,KAAK,IAAL,CAAU,OAAV,CAAkB,KAAlB,MAA6B,CAAC,CAAzC;AAAA,CAAA,GAAtB,CAAhB;AACA,CAAA,SAAOA,aAAM,IAAN,CAAW,KAAX,EAAkB,OAAlB,CAAP;AACD,CAAA,CANM;;AAQP;;;;;;AAeA,AAAO,CAAA,SAAS,QAAT,CAAmB,IAAnB,EAAyB,IAAzB,EAA+B,EAA/B,EAAmC;AACxC,CAAA,WAAS,OAAO,EAAhB;;;;;;;;AAQA,CAAA,OAAK,IAAL,GAAY,IAAZ;;AAEA,CAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,IAAnB;;;;;;;;AAQA,CAAA,OAAK,EAAL,GAAU,EAAV;AACD,CAAA;;AAED,CAAA,IAAMC,aAAW;;;;;;;;AAQf,CAAA,SAAO,KARQ;;;;;;;;;AAiBf,CAAA,OAAK;AAjBU,CAAA,CAAjB;;;;;;;;;;;;;AA+BA,AAAO,CAAA,SAAS,OAAT,CAAkB,IAAlB,EAAwB;AAC7B,CAAA,eAAM,cAAN,CAAqB,IAArB,EAA2B,OAA3B;AACA,CAAA,mBAAU,IAAV,CAAe,IAAf;AACA,CAAA,WAAS,OAAO,EAAhB;AACA,CAAA,eAAM,MAAN,CAAa,IAAb,EAAmBA,UAAnB;AACA,CAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,IAAnB;AACD,CAAA;;AAEDC,kBAAU,MAAV,CAAiB;AACf,CAAA,eAAa,OADE;;;;;;;;;;;;;;;;;;;;;;;AAwBf,CAAA,cAAY,KAxBG;;;;;;;;;;;;;;;;;;;;;;;AA+Cf,CAAA,eAAa,KA/CE;;;;;;;;;;;;;;;;;;;;;;;AAsEf,CAAA,mBAAiB,KAtEF;;;;;;;;;;;;;;;;;;;;;;;AA6Ff,CAAA,gBAAc,KA7FC;;;;;;;;;;;;;;;;;;;;;;;AAoHf,CAAA,mBAAiB,KApHF;;;;;;;;;;;;;;;;;;;;;;;AA2If,CAAA,aAAW,KA3II;;;;;;;;;;;;;;;;;;;;;;;AAkKf,CAAA,gBAAc,KAlKC;;;;;;;;;;;;;;;;;;;;;;;;AA0Lf,CAAA,YAAU,KA1LK;;;;;;;;;;;;;;;;;;;;;;;;AAkNf,CAAA,eAAa,KAlNE;;;;;;;;;;;;;;;;;;;;;;;;AA0Of,CAAA,kBAAgB,KA1OD;;;;;;;;;;;;;;;;;;;;;;;AAiQf,CAAA,mBAAiB,KAjQF;;;;;;;;;;;;;;;;;;AAmRf,CAAA,eAAa,IAnRE;;;;;;;;;;;;;;;;;;;;AAuSf,CAAA,gBAAc,IAvSC;;;;;;;;;;;;;;;;;;;;AA2Tf,CAAA,oBAAkB,IA3TH;;;;;;;;;;;;;;;;;;AA6Uf,CAAA,iBAAe,IA7UA;;;;;;;;;;;;;;;;;;AA+Vf,CAAA,oBAAkB,IA/VH;;;;;;;;;;;;;;;;;;AAiXf,CAAA,cAAY,IAjXG;;;;;;;;;;;;;;;;;;AAmYf,CAAA,iBAAe,IAnYA;;;;;;;;;;;;;;;;;;AAqZf,CAAA,aAAW,IArZI;;;;;;;;;;;;;;;;;;;;;AA0af,CAAA,gBAAc,IA1aC;;;;;;;;;;;;;;;;;;;;;AA+bf,CAAA,mBAAiB,IA/bF;;;;;;;;;;;;;;;;;;;;AAmdf,CAAA,oBAAkB,IAndH;;;;;;;;;;;;;;;;;;;;;AAwef,CAAA,OAxee,iBAweR,MAxeQ,EAweA,KAxeA,EAweO,IAxeP,EAwea;AAAA,CAAA;;AAC1B,CAAA,QAAI,WAAJ;AACA,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,aAAf;AACA,CAAA,WAAOF,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;;AAEV,CAAA,WAAK,KAAK,EAAL,GAAU,OAAf;AACA,CAAA,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,MAAK,MAAL,CAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAAd,CAAP;AACD,CAAA,KANI,EAOJ,IAPI,CAOC,UAAC,OAAD,EAAa;AAAA,CAAA,mCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,EAA3B,CAAf;AACA,CAAA,iBAAW,MAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,MAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAjBI,CAAP;AAkBD,CAAA,GAjgBc;;;;;;;;;;;;;;;AA+gBf,CAAA,QA/gBe,kBA+gBP,MA/gBO,EA+gBC,KA/gBD,EA+gBQ,IA/gBR,EA+gBc;AAAA,CAAA;;AAC3B,CAAA,QAAI,WAAJ;AACA,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,cAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;;AAEhB,CAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,CAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,QAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,OAAL,CAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B,CAAd,CAAP;AACD,CAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,QAA3B,CAAf;AACA,CAAA,eAAS,OAAT,GAAmB,OAAO,CAAP,GAAW,CAA9B;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,aAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KApBI,CAAP;AAqBD,CAAA,GA3iBc;;;;;;;;;;;;;;;AAyjBf,CAAA,YAzjBe,sBAyjBH,MAzjBG,EAyjBK,KAzjBL,EAyjBY,IAzjBZ,EAyjBkB;AAAA,CAAA;;AAC/B,CAAA,QAAI,WAAJ;AACA,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;;AAEhB,CAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,CAAA,cAAQ,MAAM,GAAN,CAAU,UAAC,MAAD;AAAA,CAAA,eAAY,iBAAiB,MAAjB,EAAyB,MAAzB,EAAiC,IAAjC,CAAZ;AAAA,CAAA,OAAV,CAAR;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,WAAL,CAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,CAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,eAAS,OAAO,EAAhB;AACA,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,CAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KArBI,CAAP;AAsBD,CAAA,GAtlBc;;;;;;;;;;;;;;;;AAqmBf,CAAA,SArmBe,mBAqmBN,MArmBM,EAqmBE,EArmBF,EAqmBM,IArmBN,EAqmBY;AAAA,CAAA;;AACzB,CAAA,QAAI,WAAJ;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,eAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAd,EACJ,IADI,CACC,YAAM;AACV,CAAA,WAAK,KAAK,EAAL,GAAU,SAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,QAAL,CAAc,MAAd,EAAsB,EAAtB,EAA0B,IAA1B,CAAd,CAAP;AACD,CAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,SAA3B,CAAf;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,cAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,QAA3B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAhBI,CAAP;AAiBD,CAAA,GA5nBc;;;;;;;;;;;;;;;;;;;;;;AAipBf,CAAA,YAjpBe,sBAipBH,MAjpBG,EAipBK,KAjpBL,EAipBY,IAjpBZ,EAipBkB;AAAA,CAAA;;AAC/B,CAAA,QAAI,WAAJ;AACA,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;AACV,CAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,WAAL,CAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,CAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAhBI,CAAP;AAiBD,CAAA,GAzqBc;;;;;;;;;;;;AAorBf,CAAA,eAprBe,yBAorBA,MAprBA,EAorBQ,GAprBR,EAorBa,OAprBb,EAorBsB,MAprBtB,EAorB8B;AAAA,CAAA;;AAC3C,CAAA,QAAM,cAAc,IAAI,WAAJ,EAApB;;AAEA,CAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AAAA,CAAA;AACtD,CAAA,YAAM,SAAS,OAAf;AACA,CAAA;AAAA,CAAA,aAAO,OAAK,IAAL,CAAU,WAAV,EAAuB,OAAK,uBAAL,CAA6B,MAA7B,EAAqC,GAArC,EAA0C,MAA1C,CAAvB,EAA0E,MAA1E,EACJ,IADI,CACC,UAAC,WAAD,EAAiB;AACrB,CAAA,gBAAI,aAAJ,CAAkB,MAAlB,EAA0B,WAA1B;AACD,CAAA,WAHI;AAAP,CAAA;AAFsD,CAAA;;AAAA,CAAA;AAMvD,CAAA,KAND,MAMO;AACL,CAAA,UAAM,OAAO,QACV,GADU,CACN,UAAC,MAAD;AAAA,CAAA,eAAY,OAAK,uBAAL,CAA6B,MAA7B,EAAqC,GAArC,EAA0C,MAA1C,CAAZ;AAAA,CAAA,OADM,EAEV,MAFU,CAEH,UAAC,GAAD;AAAA,CAAA,eAAS,GAAT;AAAA,CAAA,OAFG,CAAb;AAGA,CAAA,aAAO,KAAK,OAAL,CAAa,WAAb,EAA0B;AAC/B,CAAA,kCACG,YAAY,WADf,EAC6B;AACzB,CAAA,gBAAM;AADmB,CAAA,SAD7B;AAD+B,CAAA,OAA1B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,CAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,CAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,CAAA,gBAAI,YAAY,YAAY,WAAxB,MAAyC,OAAO,IAAI,UAAX,CAA7C,EAAqE;AACnE,CAAA,kBAAI,aAAJ,CAAkB,MAAlB,EAA0B,WAA1B;AACD,CAAA;AACF,CAAA,WAJD;AAKD,CAAA,SAND;AAOD,CAAA,OAdM,CAAP;AAeD,CAAA;AACF,CAAA,GAjtBc;;;;;;;;;;;;;;;;AAguBf,CAAA,MAhuBe,gBAguBT,MAhuBS,EAguBD,EAhuBC,EAguBG,IAhuBH,EAguBS;AAAA,CAAA;;AACtB,CAAA,QAAI,eAAJ;AAAA,CAAA,QAAY,WAAZ;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAd,EACJ,IADI,CACC,YAAM;AACV,CAAA,WAAK,KAAK,EAAL,GAAU,MAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,KAAL,CAAW,MAAX,EAAmB,EAAnB,EAAuB,IAAvB,CAAd,CAAP;AACD,CAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACD,OADC;;AAAA,CAAA,UACZ,OADY;;AAEjB,CAAA,UAAI,CAAC,OAAL,EAAc;AACZ,CAAA;AACD,CAAA;AACD,CAAA,eAAS,OAAT;AACA,CAAA,UAAM,QAAQ,EAAd;;AAEA,CAAA,mBAAM,eAAN,CAAsB,MAAtB,EAA8B,IAA9B,EAAoC,UAAC,GAAD,EAAM,MAAN,EAAiB;AACnD,CAAA,YAAI,aAAJ;AACA,CAAA,YAAI,IAAI,UAAJ,KAAmB,IAAI,IAAJ,KAAa,QAAb,IAAyB,IAAI,IAAJ,KAAa,SAAzD,CAAJ,EAAyE;AACvE,CAAA,cAAI,IAAI,IAAJ,KAAa,QAAjB,EAA2B;AACzB,CAAA,mBAAO,OAAK,UAAL,CAAgB,MAAhB,EAAwB,GAAxB,EAA6B,MAA7B,EAAqC,MAArC,CAAP;AACD,CAAA,WAFD,MAEO;AACL,CAAA,mBAAO,OAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,MAA9B,EAAsC,MAAtC,CAAP;AACD,CAAA;AACF,CAAA,SAND,MAMO,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,SAAlC,EAA6C;AAClD,CAAA,iBAAO,OAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC,EAA+C,MAA/C,CAAP;AACD,CAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,WAAlC,EAA+C;AACpD,CAAA,iBAAO,OAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC,EAAiD,MAAjD,CAAP;AACD,CAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,WAAjB,EAA8B;AACnC,CAAA,iBAAO,OAAK,aAAL,CAAmB,MAAnB,EAA2B,GAA3B,EAAgC,MAAhC,EAAwC,MAAxC,CAAP;AACD,CAAA;AACD,CAAA,YAAI,IAAJ,EAAU;AACR,CAAA,gBAAM,IAAN,CAAW,IAAX;AACD,CAAA;AACF,CAAA,OAlBD;;AAoBA,CAAA,aAAOA,aAAM,OAAN,CAAc,GAAd,CAAkB,KAAlB,CAAP;AACD,CAAA,KAnCI,EAoCJ,IApCI,CAoCC,YAAM;AACV,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,MAAb,EAAqB,EAArB,EAAyB,MAAzB,CAAf;AACA,CAAA,eAAS,KAAT,GAAiB,SAAS,CAAT,GAAa,CAA9B;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,QAA3B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KA7CI,CAAP;AA8CD,CAAA,GArxBc;;;;;;;;;;;;;;;;;;;;;;AA0yBf,CAAA,SA1yBe,mBA0yBN,MA1yBM,EA0yBE,KA1yBF,EA0yBS,IA1yBT,EA0yBe;AAAA,CAAA;;AAC5B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;;AAEA,CAAA,QAAI,UAAU,EAAd;AACA,CAAA,QAAI,WAAJ;AACA,CAAA,QAAM,aAAa,KAAK,WAAxB;;AAEA,CAAA,QAAIA,aAAM,QAAN,CAAe,UAAf,CAAJ,EAAgC;AAC9B,CAAA,UAAM,cAAc,WAAW,KAAX,IAAoB,EAAxC;AACA,CAAA,UAAI,WAAW,OAAf,EAAwB;AACtB,CAAA,gBAAQ,WAAR;AACD,CAAA,OAFD,MAEO;AACL,CAAA,qBAAM,UAAN,CAAiB,KAAjB,EAAwB,WAAxB;AACD,CAAA;AACF,CAAA;;;AAGD,CAAA,SAAK,KAAK,EAAL,GAAU,eAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;AACV,CAAA,WAAK,KAAK,EAAL,GAAU,SAAf;AACA,CAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,QAAL,CAAc,MAAd,EAAsB,KAAtB,EAA6B,IAA7B,CAAd,CAAP;AACD,CAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACA,OADA;;AAAA,CAAA,UACZ,QADY;;AAEjB,CAAA,mBAAa,WAAW,EAAxB;AACA,CAAA,gBAAU,QAAV;AACA,CAAA,UAAM,QAAQ,EAAd;AACA,CAAA,mBAAM,eAAN,CAAsB,MAAtB,EAA8B,IAA9B,EAAoC,UAAC,GAAD,EAAM,MAAN,EAAiB;AACnD,CAAA,YAAI,aAAJ;AACA,CAAA,YAAI,IAAI,UAAJ,KAAmB,IAAI,IAAJ,KAAa,QAAb,IAAyB,IAAI,IAAJ,KAAa,SAAzD,CAAJ,EAAyE;AACvE,CAAA,cAAI,IAAI,IAAJ,KAAa,SAAjB,EAA4B;AAC1B,CAAA,mBAAO,OAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,OAA9B,EAAuC,MAAvC,CAAP;AACD,CAAA,WAFD,MAEO;AACL,CAAA,mBAAO,OAAK,UAAL,CAAgB,MAAhB,EAAwB,GAAxB,EAA6B,OAA7B,EAAsC,MAAtC,CAAP;AACD,CAAA;AACF,CAAA,SAND,MAMO,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,SAAlC,EAA6C;AAClD,CAAA,iBAAO,OAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,OAAvC,EAAgD,MAAhD,CAAP;AACD,CAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,WAAlC,EAA+C;AACpD,CAAA,iBAAO,OAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,OAAzC,EAAkD,MAAlD,CAAP;AACD,CAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,WAAjB,EAA8B;AACnC,CAAA,iBAAO,OAAK,aAAL,CAAmB,MAAnB,EAA2B,GAA3B,EAAgC,OAAhC,EAAyC,MAAzC,CAAP;AACD,CAAA;AACD,CAAA,YAAI,IAAJ,EAAU;AACR,CAAA,gBAAM,IAAN,CAAW,IAAX;AACD,CAAA;AACF,CAAA,OAlBD;AAmBA,CAAA,aAAOA,aAAM,OAAN,CAAc,GAAd,CAAkB,KAAlB,CAAP;AACD,CAAA,KA/BI,EAgCJ,IAhCI,CAgCC,YAAM;AACV,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,OAAb,EAAsB,EAAtB,EAA0B,SAA1B,CAAf;AACA,CAAA,eAAS,KAAT,GAAiB,QAAQ,MAAzB;AACA,CAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,cAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAzCI,CAAP;AA0CD,CAAA,GAv2Bc;;;;;;;;;;;;;AAm3Bf,CAAA,QAn3Be,kBAm3BP,GAn3BO,EAm3BF,IAn3BE,EAm3BI;AACjB,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,WAAO,KAAK,GAAL,MAAc,SAAd,GAA0BA,aAAM,SAAN,CAAgB,KAAK,GAAL,CAAhB,CAA1B,GAAuDA,aAAM,SAAN,CAAgB,KAAK,GAAL,CAAhB,CAA9D;AACD,CAAA,GAt3Bc;;;;;;;;;;;;AAi4Bf,CAAA,aAj4Be,uBAi4BF,MAj4BE,EAi4BM,GAj4BN,EAi4BW,OAj4BX,EAi4BoB,MAj4BpB,EAi4B4B;AAAA,CAAA;;AACzC,CAAA,QAAI,WAAW,KAAf;;AAEA,CAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,CAAA,iBAAW,IAAX;AACA,CAAA,gBAAU,CAAC,OAAD,CAAV;AACD,CAAA;AACD,CAAA,QAAM,MAAM,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,CAAA,aAAY,OAAK,qBAAL,CAA2B,MAA3B,EAAmC,GAAnC,EAAwC,MAAxC,CAAZ;AAAA,CAAA,KAAZ,CAAZ;AACA,CAAA,QAAM,QAAQ;AACZ,CAAA,aAAO;AADK,CAAA,KAAd;AAGA,CAAA,QAAM,WAAW,MAAM,KAAN,CAAY,IAAI,UAAhB,IAA8B,EAA/C;AACA,CAAA,QAAI,QAAJ,EAAc;;AAEZ,CAAA,eAAS,IAAT,IAAiB,IAAI,CAAJ,CAAjB;AACD,CAAA,KAHD,MAGO;AACL,CAAA,eAAS,IAAT,IAAiB,IAAI,MAAJ,CAAW,UAAC,EAAD;AAAA,CAAA,eAAQ,EAAR;AAAA,CAAA,OAAX,CAAjB;AACD,CAAA;AACD,CAAA,WAAO,KAAK,OAAL,CAAa,IAAI,WAAJ,EAAb,EAAgC,KAAhC,EAAuC,MAAvC,EAA+C,IAA/C,CAAoD,UAAC,YAAD,EAAkB;AAC3E,CAAA,cAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,CAAA,YAAI,WAAW,EAAf;;AAEA,CAAA,YAAI,QAAJ,EAAc;AACZ,CAAA,qBAAW,YAAX;AACD,CAAA,SAFD,MAEO;AACL,CAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,CAAA,gBAAIA,aAAM,GAAN,CAAU,WAAV,EAAuB,IAAI,UAA3B,MAA2C,OAAO,OAAO,WAAd,CAA/C,EAA2E;AACzE,CAAA,uBAAS,IAAT,CAAc,WAAd;AACD,CAAA;AACF,CAAA,WAJD;AAKD,CAAA;AACD,CAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,QAA1B;AACD,CAAA,OAbD;AAcD,CAAA,KAfM,CAAP;AAgBD,CAAA,GAn6Bc;AAq6Bf,CAAA,sBAr6Be,gCAq6BO,MAr6BP,EAq6Be,GAr6Bf,EAq6BoB,OAr6BpB,EAq6B6B,MAr6B7B,EAq6BqC;AAAA,CAAA;;AAClD,CAAA,QAAI,eAAJ;AACA,CAAA,QAAM,gBAAgB,IAAI,WAAJ,EAAtB;;AAEA,CAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,CAAA,eAAS,OAAT;AACD,CAAA;;AAED,CAAA,QAAI,MAAJ,EAAY;AACV,CAAA,aAAO,KAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,CAAA,kCACG,cAAc,WADjB,EAC+B;AAC3B,CAAA,gBAAM,KAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC;AADqB,CAAA,SAD/B;AADiC,CAAA,OAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,CAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAA1B;AACD,CAAA,OARM,CAAP;AASD,CAAA,KAVD,MAUO;AAAA,CAAA;AACL,CAAA,YAAI,YAAY,EAAhB;AACA,CAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,CAAA,sBAAY,UAAU,MAAV,CAAiB,QAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC,CAAjB,CAAZ;AACD,CAAA,SAFD;AAGA,CAAA;AAAA,CAAA,aAAO,QAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,CAAA,sCACG,cAAc,WADjB,EAC+B;AAC3B,CAAA,oBAAM,OAAO,SAAP,EAAkB,MAAlB,CAAyB,UAAC,CAAD;AAAA,CAAA,uBAAO,CAAP;AAAA,CAAA,eAAzB;AADqB,CAAA,aAD/B;AADiC,CAAA,WAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,CAAA,oBAAQ,OAAR,CAAgB,UAAC,IAAD,EAAU;AACxB,CAAA,kBAAI,WAAW,EAAf;AACA,CAAA,kBAAI,WAAWA,aAAM,GAAN,CAAU,IAAV,EAAgB,IAAI,SAApB,KAAkC,EAAjD;AACA,CAAA,yBAAWA,aAAM,OAAN,CAAc,QAAd,IAA0B,QAA1B,GAAqC,OAAO,IAAP,CAAY,QAAZ,CAAhD;AACA,CAAA,2BAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,CAAA,oBAAI,YAAY,SAAS,OAAT,CAAiB,YAAY,cAAc,WAA1B,CAAjB,MAA6D,CAAC,CAA9E,EAAiF;AAC/E,CAAA,2BAAS,IAAT,CAAc,WAAd;AACD,CAAA;AACF,CAAA,eAJD;AAKA,CAAA,kBAAI,aAAJ,CAAkB,IAAlB,EAAwB,QAAxB;AACD,CAAA,aAVD;AAWA,CAAA,mBAAO,YAAP;AACD,CAAA,WAnBM;AAAP,CAAA;AALK,CAAA;;AAAA,CAAA;AAyBN,CAAA;AACF,CAAA,GAj9Bc;AAm9Bf,CAAA,wBAn9Be,kCAm9BS,MAn9BT,EAm9BiB,GAn9BjB,EAm9BsB,OAn9BtB,EAm9B+B,MAn9B/B,EAm9BuC;AAAA,CAAA;;AACpD,CAAA,QAAM,gBAAgB,IAAI,WAAJ,EAAtB;AACA,CAAA,QAAM,cAAc,OAAO,WAA3B;AACA,CAAA,QAAI,eAAJ;;AAEA,CAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,CAAA,eAAS,OAAT;AACD,CAAA;;AAED,CAAA,QAAI,MAAJ,EAAY;AACV,CAAA,aAAO,KAAK,OAAL,CAAa,IAAI,WAAJ,EAAb,EAAgC;AACrC,CAAA,kCACG,IAAI,WADP,EACqB;AACjB,CAAA,sBAAY,KAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC;AADK,CAAA,SADrB;AADqC,CAAA,OAAhC,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,CAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAA1B;AACD,CAAA,OARM,CAAP;AASD,CAAA,KAVD,MAUO;AACL,CAAA,aAAO,KAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,CAAA,kCACG,IAAI,WADP,EACqB;AACjB,CAAA,2BAAiB,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,CAAA,mBAAY,QAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC,CAAZ;AAAA,CAAA,WAAZ;AADA,CAAA,SADrB;AADiC,CAAA,OAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,CAAA,YAAM,mBAAmB,IAAI,WAA7B;AACA,CAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,CAAA,cAAM,gBAAgB,EAAtB;AACA,CAAA,cAAM,KAAKA,aAAM,GAAN,CAAU,MAAV,EAAkB,WAAlB,CAAX;AACA,CAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,CAAA,gBAAM,cAAcA,aAAM,GAAN,CAAU,YAAV,EAAwB,gBAAxB,KAA6C,EAAjE;AACA,CAAA,gBAAI,YAAY,OAAZ,CAAoB,EAApB,MAA4B,CAAC,CAAjC,EAAoC;AAClC,CAAA,4BAAc,IAAd,CAAmB,WAAnB;AACD,CAAA;AACF,CAAA,WALD;AAMA,CAAA,cAAI,aAAJ,CAAkB,MAAlB,EAA0B,aAA1B;AACD,CAAA,SAVD;AAWD,CAAA,OAnBM,CAAP;AAoBD,CAAA;AACF,CAAA,GA5/Bc;;;;;;;;;;;;AAugCf,CAAA,YAvgCe,sBAugCH,MAvgCG,EAugCK,GAvgCL,EAugCU,OAvgCV,EAugCmB,MAvgCnB,EAugC2B;AACxC,CAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,CAAA,gBAAU,CAAC,OAAD,CAAV;AACD,CAAA;AACD,CAAA,WAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,OAA9B,EAAuC,MAAvC,EAA+C,IAA/C,CAAoD,YAAM;AAC/D,CAAA,cAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,CAAA,YAAM,cAAc,IAAI,aAAJ,CAAkB,MAAlB,CAApB;AACA,CAAA,YAAIA,aAAM,OAAN,CAAc,WAAd,KAA8B,YAAY,MAA9C,EAAsD;AACpD,CAAA,cAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAAY,CAAZ,CAA1B;AACD,CAAA;AACF,CAAA,OALD;AAMD,CAAA,KAPM,CAAP;AAQD,CAAA,GAnhCc;;;;;;;;;;;;;;;AAiiCf,CAAA,uBAjiCe,iCAiiCQ,MAjiCR,EAiiCgB,GAjiChB,EAiiCqB,MAjiCrB,EAiiC6B;AAC1C,CAAA,WAAO,IAAI,aAAJ,CAAkB,MAAlB,CAAP;AACD,CAAA,GAniCc;;;;;;;;;;;;AA8iCf,CAAA,sBA9iCe,gCA8iCO,MA9iCP,EA8iCe,GA9iCf,EA8iCoB,MA9iCpB,EA8iC4B;AACzC,CAAA,QAAI,YAAY,EAAhB;AACA,CAAA,QAAI,WAAWA,aAAM,GAAN,CAAU,MAAV,EAAkB,IAAI,SAAtB,KAAoC,EAAnD;AACA,CAAA,eAAWA,aAAM,OAAN,CAAc,QAAd,IAA0B,QAA1B,GAAqC,OAAO,IAAP,CAAY,QAAZ,CAAhD;AACA,CAAA,gBAAY,UAAU,MAAV,CAAiB,QAAjB,CAAZ;AACA,CAAA,WAAO,OAAO,SAAP,EAAkB,MAAlB,CAAyB,UAAC,CAAD;AAAA,CAAA,aAAO,CAAP;AAAA,CAAA,KAAzB,CAAP;AACD,CAAA,GApjCc;;;;;;;;;;;;AA+jCf,CAAA,wBA/jCe,kCA+jCS,MA/jCT,EA+jCiB,GA/jCjB,EA+jCsB,MA/jCtB,EA+jC8B;AAC3C,CAAA,WAAOA,aAAM,GAAN,CAAU,MAAV,EAAkB,OAAO,WAAzB,CAAP;AACD,CAAA,GAjkCc;;;;;;;;;;;;AA4kCf,CAAA,yBA5kCe,mCA4kCU,MA5kCV,EA4kCkB,GA5kClB,EA4kCuB,MA5kCvB,EA4kC+B;AAC5C,CAAA,WAAO,IAAI,aAAJ,CAAkB,MAAlB,CAAP;AACD,CAAA,GA9kCc;;;;;;;;;;;;;;;;;;;;;;;AAomCf,CAAA,KApmCe,eAomCV,MApmCU,EAomCF,KApmCE,EAomCK,KApmCL,EAomCY,IApmCZ,EAomCkB;AAAA,CAAA;;AAC/B,CAAA,QAAI,WAAJ;AACA,CAAA,QAAI,CAACA,aAAM,QAAN,CAAe,KAAf,CAAL,EAA4B;AAC1B,CAAA,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD,CAAA;AACD,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,CAAd,EACJ,IADI,CACC,YAAM;;AAEV,CAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,KAA5B,EAAmC,IAAnC;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,KAAlB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,CAAA,KANI,EAOJ,IAPI,CAOC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,EAA3B,CAAf;AACA,CAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC,QAArC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAjBI,CAAP;AAkBD,CAAA,GAhoCc;;;;;;;;;;;AA0oCf,CAAA,SA1oCe,mBA0oCN,QA1oCM,EA0oCI,IA1oCJ,EA0oCU;AACvB,CAAA,WAAO,KAAK,MAAL,CAAY,KAAZ,EAAmB,IAAnB,IAA2B,QAA3B,GAAsC,SAAS,IAAtD;AACD,CAAA,GA5oCc;;;;;;;;;;;;;;;;;AA4pCf,CAAA,QA5pCe,kBA4pCP,MA5pCO,EA4pCC,EA5pCD,EA4pCK,KA5pCL,EA4pCY,IA5pCZ,EA4pCkB;AAAA,CAAA;;AAC/B,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,WAAJ;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,cAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;;AAEhB,CAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,CAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,QAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,KAAzB,EAAgC,IAAhC;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,OAAL,CAAa,MAAb,EAAqB,EAArB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,CAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,CAAA,oCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,QAA3B,CAAf;AACA,CAAA,eAAS,OAAT,GAAmB,OAAO,CAAP,GAAW,CAA9B;AACA,CAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,aAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KApBI,CAAP;AAqBD,CAAA,GAxrCc;;;;;;;;;;;;;;;;;;;;;;;AA8sCf,CAAA,WA9sCe,qBA8sCJ,MA9sCI,EA8sCI,KA9sCJ,EA8sCW,KA9sCX,EA8sCkB,IA9sClB,EA8sCwB;AAAA,CAAA;;AACrC,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,WAAJ;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,iBAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;;AAEhB,CAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,CAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,KAA5B,EAAmC,IAAnC;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,UAAL,CAAgB,MAAhB,EAAwB,KAAxB,EAA+B,KAA/B,EAAsC,IAAtC,CAAd,CAAP;AACD,CAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,CAAA,qCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,eAAS,OAAO,EAAhB;AACA,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,WAA3B,CAAf;AACA,CAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,CAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,gBAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC,QAArC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KArBI,CAAP;AAsBD,CAAA,GA5uCc;;;;;;;;;;;;;;;AA0vCf,CAAA,YA1vCe,sBA0vCH,MA1vCG,EA0vCK,OA1vCL,EA0vCc,IA1vCd,EA0vCoB;AAAA,CAAA;;AACjC,CAAA,gBAAY,UAAU,EAAtB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,WAAJ;AACA,CAAA,QAAM,cAAc,OAAO,WAA3B;;AAEA,CAAA,cAAU,QAAQ,MAAR,CAAe,UAAC,MAAD;AAAA,CAAA,aAAYA,aAAM,GAAN,CAAU,MAAV,EAAkB,WAAlB,CAAZ;AAAA,CAAA,KAAf,CAAV;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,CAAd,EACJ,IADI,CACC,UAAC,QAAD,EAAc;;AAElB,CAAA,gBAAU,aAAa,SAAb,GAAyB,OAAzB,GAAmC,QAA7C;AACA,CAAA,gBAAU,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,CAAA,eAAY,iBAAiB,MAAjB,EAAyB,MAAzB,EAAiC,IAAjC,CAAZ;AAAA,CAAA,OAAZ,CAAV;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,OAArB,EAA8B,IAA9B;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,WAAL,CAAiB,MAAjB,EAAyB,OAAzB,EAAkC,IAAlC,CAAd,CAAP;AACD,CAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,CAAA,qCACI,OADJ;;AAAA,CAAA,UACZ,IADY;AAAA,CAAA,UACN,MADM;;AAEjB,CAAA,eAAS,OAAO,EAAhB;AACA,CAAA,iBAAW,SAAS,EAApB;AACA,CAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,CAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,CAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;;AAGA,CAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,QAAhC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KArBI,CAAP;AAsBD,CAAA;AA1xCc,CAAA,CAAjB;;CCrGA,IAAI,WAAW,KAAf;;AAEA,CAAA,IAAI;AACF,CAAA,aAAW,UAAU,OAAO,KAA5B;AACD,CAAA,CAFD,CAEE,OAAO,CAAP,EAAU;;AAEZ,CAAA,SAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,CAAA,SAAQ,SAAS,IAAT,IAAiB,UAAU,EAAnC;AACD,CAAA;AACD,CAAA,SAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,CAAA,gBAAc,YAAY,EAA1B;AACA,CAAA,SAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;AACD,CAAA;AACD,CAAA,SAAS,QAAT,GAA4B;AAAA,CAAA,oCAAN,IAAM;AAAN,CAAA,QAAM;AAAA,CAAA;;AAC1B,CAAA,MAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;AACA,CAAA,SAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;AACD,CAAA;;AAED,CAAA,SAAS,MAAT,CAAiB,GAAjB,EAAsB;AACpB,CAAA,SAAO,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;AAQD,CAAA;;AAED,CAAA,SAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,CAAA,MAAI,CAAC,MAAL,EAAa;AACX,CAAA,WAAO,GAAP;AACD,CAAA;;AAED,CAAA,MAAM,QAAQ,EAAd;;AAEA,CAAA,eAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;AACvC,CAAA,QAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;AAC9C,CAAA;AACD,CAAA;AACD,CAAA,QAAI,CAACA,aAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;AACvB,CAAA,YAAM,CAAC,GAAD,CAAN;AACD,CAAA;;AAED,CAAA,QAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,CAAA,UAAI,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAAhC,EAAiD;AAC/C,CAAA,YAAI,EAAE,WAAF,EAAJ;AACD,CAAA,OAFD,MAEO,IAAIA,aAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;AAC5B,CAAA,YAAIA,aAAM,MAAN,CAAa,CAAb,CAAJ;AACD,CAAA;AACD,CAAA,YAAM,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;AACD,CAAA,KAPD;AAQD,CAAA,GAhBD;;AAkBA,CAAA,MAAI,MAAM,MAAN,GAAe,CAAnB,EAAsB;AACpB,CAAA,WAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;AACD,CAAA;;AAED,CAAA,SAAO,GAAP;AACD,CAAA;;AAED,CAAA,IAAM,WAAW;;;;;;AAMf,CAAA,YAAU,EANK;;;;;;;AAaf,CAAA,sBAAoB,KAbL;;;;;;AAmBf,CAAA,QAAMG,OAnBS;;;;;;AAyBf,CAAA,cAAY,EAzBG;;;;;;AA+Bf,CAAA,UAAQ,EA/BO;;;;;;;AAsCf,CAAA,YAAU;AAtCK,CAAA,CAAjB;;;;;;;;;;;;;;;;AAuDA,AAAO,CAAA,SAAS,WAAT,CAAsB,IAAtB,EAA4B;AACjC,CAAA,eAAM,cAAN,CAAqB,IAArB,EAA2B,WAA3B;;AAEA,CAAA,WAAS,OAAO,EAAhB;;AAEA,CAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,QAAnB;AACA,CAAA,UAAQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;AACD,CAAA;;;;;;;AAOD,CAAA,QAAQ,MAAR,CAAe;AACb,CAAA,eAAa,WADA;;;;;;;;;;AAWb,CAAA,YAAU,KAXG;;;;;;;;;;AAqBb,CAAA,YAAU,KArBG;;;;;;;;;AA8Bb,CAAA,aAAW,KA9BE;;;;;;;;;;;AAyCb,CAAA,aAAW,KAzCE;;;;;;;;;;;AAoDb,CAAA,YAAU,KApDG;;;;;;;;;AA6Db,CAAA,aAAW,IA7DE;;;;;;;;;AAsEb,CAAA,aAAW,IAtEE;;;;;;;;AA8Eb,CAAA,cAAY,IA9EC;;;;;;;;;;AAwFb,CAAA,cAAY,IAxFC;;;;;;;;;;AAkGb,CAAA,aAAW,IAlGE;;AAoGb,CAAA,QApGa,kBAoGL,MApGK,EAoGG,KApGH,EAoGU,IApGV,EAoGgB;AAAA,CAAA;;AAC3B,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,MAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAzGY;AA2Gb,CAAA,SA3Ga,mBA2GJ,MA3GI,EA2GI,KA3GJ,EA2GW,IA3GX,EA2GiB;AAAA,CAAA;;AAC5B,CAAA,WAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAJA,CAAP;AAKD,CAAA,GAjHY;AAmHb,CAAA,aAnHa,uBAmHA,MAnHA,EAmHQ,KAnHR,EAmHe,IAnHf,EAmHqB;AAAA,CAAA;;AAChC,CAAA,WAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAJA,CAAP;AAKD,CAAA,GAzHY;AA2Hb,CAAA,UA3Ha,oBA2HH,MA3HG,EA2HK,EA3HL,EA2HS,IA3HT,EA2He;AAAA,CAAA;;AAC1B,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAhIY;AAkIb,CAAA,aAlIa,uBAkIA,MAlIA,EAkIQ,KAlIR,EAkIe,IAlIf,EAkIqB;AAAA,CAAA;;AAChC,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAvIY;AAyIb,CAAA,MAzIa,gBAyIP,MAzIO,EAyIC,IAzID,EAyIO,QAzIP,EAyIiB;AAC5B,CAAA,WAAO,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;AACD,CAAA,GA3IY;AA6Ib,CAAA,OA7Ia,iBA6IN,MA7IM,EA6IE,EA7IF,EA6IM,IA7IN,EA6IY;AAAA,CAAA;;AACvB,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAlJY;AAoJb,CAAA,UApJa,oBAoJH,MApJG,EAoJK,KApJL,EAoJY,IApJZ,EAoJkB;AAAA,CAAA;;AAC7B,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAzJY;AA2Jb,CAAA,MA3Ja,gBA2JP,MA3JO,EA2JC,KA3JD,EA2JQ,KA3JR,EA2Je,IA3Jf,EA2JqB;AAAA,CAAA;;AAChC,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAHA,CAAP;AAID,CAAA,GAhKY;AAkKb,CAAA,SAlKa,mBAkKJ,MAlKI,EAkKI,EAlKJ,EAkKQ,KAlKR,EAkKe,IAlKf,EAkKqB;AAAA,CAAA;;AAChC,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,CAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAJA,CAAP;AAKD,CAAA,GAxKY;AA0Kb,CAAA,YA1Ka,sBA0KD,MA1KC,EA0KO,KA1KP,EA0Kc,KA1Kd,EA0KqB,IA1KrB,EA0K2B;AAAA,CAAA;;AACtC,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,CAAA,aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAJA,CAAP;AAKD,CAAA,GAhLY;AAkLb,CAAA,aAlLa,uBAkLA,MAlLA,EAkLQ,OAlLR,EAkLiB,IAlLjB,EAkLuB;AAAA,CAAA;;AAClC,CAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,CAAA,aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,CAAA,KAJA,CAAP;AAKD,CAAA,GAxLY;;;;;;;;;;;;;;;AAsMb,CAAA,OAtMa,iBAsMN,MAtMM,EAsME,KAtMF,EAsMS,IAtMT,EAsMe;AAC1B,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,CAAY,KAAZ,GAAoB,IAApB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,KAAlB,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,MAAnC,EAA2C,KAA3C,EAAkD,IAAlD,CAAP;AACD,CAAA,GA/MY;;;;;;;;;;;;;;;AA6Nb,CAAA,QA7Na,kBA6NL,MA7NK,EA6NG,KA7NH,EA6NU,IA7NV,EA6NgB;AAC3B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,KAA5C,EAAmD,IAAnD,CAAP;AACD,CAAA,GAnOY;;;;;;;;;;;;;;;AAiPb,CAAA,YAjPa,sBAiPD,MAjPC,EAiPO,KAjPP,EAiPc,IAjPd,EAiPoB;AAC/B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,CAAA,GAvPY;;;;;;;;;;;;;;AAoQb,CAAA,KApQa,eAoQR,GApQQ,EAoQH,MApQG,EAoQK,IApQL,EAoQW;AAAA,CAAA;;AACtB,CAAA,QAAI,WAAJ;AACA,CAAA,eAAW,SAAS,EAApB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,CAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,WAAOH,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;AAEjB,CAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,CAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,CAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;AAElB,CAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAbI,CAAP;AAcD,CAAA,GA3RY;;;;;;;;;;;;;;AAwSb,CAAA,aAxSa,uBAwSA,MAxSA,EAwSQ,QAxSR,EAwSkB,IAxSlB,EAwSwB;AACnC,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;AACtC,CAAA,aAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;AACD,CAAA;AACD,CAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;AACxC,CAAA,aAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;AACD,CAAA;AACD,CAAA,QAAI,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;AAC/C,CAAA,aAAO,SAAS,IAAhB;AACD,CAAA;AACD,CAAA,WAAO,QAAP;AACD,CAAA,GApTY;;;;;;;;;;;;;;;AAkUb,CAAA,SAlUa,mBAkUJ,MAlUI,EAkUI,EAlUJ,EAkUQ,IAlUR,EAkUc;AACzB,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,EAA7C,EAAiD,IAAjD,CAAP;AACD,CAAA,GAxUY;;;;;;;;;;;;;;;AAsVb,CAAA,YAtVa,sBAsVD,MAtVC,EAsVO,KAtVP,EAsVc,IAtVd,EAsVoB;AAC/B,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,CAAA,GA9VY;;;;;;;;;;AAuWb,CAAA,OAvWa,mBAuWG;AACd,CAAA,QAAI,OAAJ,EAAa;AAAA,CAAA;;AACX,CAAA,2BAAQ,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;AACD,CAAA;AACF,CAAA,GA3WY;;;;;;;;;;;;;;;;AA0Xb,CAAA,OA1Xa;AAAA,CAAA;AAAA,CAAA;AAAA,CAAA;;AAAA,CAAA;AAAA,CAAA;AAAA,CAAA;;AAAA,CAAA;AAAA,CAAA,cA0XN,MA1XM,EA0XE,IA1XF,EA0XQ;AACnB,CAAA,QAAM,gBAAgB;AACpB,CAAA,cAAQ,OAAO,MADK;;AAGpB,CAAA,eAAS,IAAI,OAAJ,CAAY,OAAO,OAAnB;AAHW,CAAA,KAAtB;;AAMA,CAAA,QAAI,OAAO,IAAX,EAAiB;AACf,CAAA,oBAAc,IAAd,GAAqBA,aAAM,MAAN,CAAa,OAAO,IAApB,CAArB;AACD,CAAA;;AAED,CAAA,WAAO,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAZ,EAAiD,aAAjD,CAAN,EACJ,IADI,CACC,UAAC,QAAD,EAAc;AAClB,CAAA,eAAS,MAAT,GAAkB;AAChB,CAAA,gBAAQ,OAAO,MADC;AAEhB,CAAA,aAAK,OAAO;AAFI,CAAA,OAAlB;AAIA,CAAA,aAAO,SAAS,IAAT,GACJ,IADI,CACC,UAAC,IAAD,EAAU;AACd,CAAA,iBAAS,IAAT,GAAgB,IAAhB;AACA,CAAA,eAAO,QAAP;AACD,CAAA,OAJI,CAAP;AAKD,CAAA,KAXI,CAAP;AAYD,CAAA,GAjZY;;;;;;;;;;;;;;;AA+Zb,CAAA,MA/Za,gBA+ZP,MA/ZO,EA+ZC,EA/ZD,EA+ZK,IA/ZL,EA+ZW;AACtB,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,IAAlB,CAAuB,IAAvB,CAA4B,IAA5B,EAAkC,MAAlC,EAA0C,EAA1C,EAA8C,IAA9C,CAAP;AACD,CAAA,GAraY;;;;;;;;;;;;;;;AAmbb,CAAA,SAnba,mBAmbJ,MAnbI,EAmbI,KAnbJ,EAmbW,IAnbX,EAmbiB;AAC5B,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,KAA7C,EAAoD,IAApD,CAAP;AACD,CAAA,GA3bY;;;;;;;;;;;;;AAucb,CAAA,KAvca,eAucR,GAvcQ,EAucH,MAvcG,EAucK,IAvcL,EAucW;AAAA,CAAA;;AACtB,CAAA,QAAI,WAAJ;AACA,CAAA,eAAW,SAAS,EAApB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,CAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;AAEjB,CAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,CAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,CAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;AAElB,CAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAbI,CAAP;AAcD,CAAA,GA9dY;;;;;;;;;;;AAweb,CAAA,aAxea,uBAweA,MAxeA,EAweQ,EAxeR,EAweY,IAxeZ,EAwekB;AAAA,CAAA;;AAC7B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAcA,aAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;AACA,CAAA,QAAM,eAAe,OAAO,YAAP,IAAuB,EAA5C;AACA,CAAA,QAAI,WAAWA,aAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoCA,aAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;AAEA,CAAA,iBAAa,OAAb,CAAqB,UAAC,GAAD,EAAS;AAC5B,CAAA,UAAI,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;AAC3C,CAAA;AACD,CAAA;AACD,CAAA,UAAI,aAAJ;AACA,CAAA,UAAM,YAAY,IAAI,UAAtB;AACA,CAAA,UAAM,YAAY,IAAI,WAAJ,EAAlB;AACA,CAAA,UAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;AAEA,CAAA,UAAI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;AAClD,CAAA,YAAI,aAAa,KAAjB,EAAwB;AACtB,CAAA,iBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;AACD,CAAA;AACD,CAAA,eAAO,KAAP;AACD,CAAA,OALD,MAKO;AACL,CAAA,eAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;;AAEA,CAAA,YAAIA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,CAAA,iBAAO,EAAP;AACD,CAAA;;AAED,CAAA,YAAI,IAAJ,EAAU;AACR,CAAA,qBAAW,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0BA,aAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;AACD,CAAA;;AAED,CAAA,YAAI,QAAJ,EAAc;AAAA,CAAA;AACZ,CAAA,mBAAO,KAAK,QAAZ;AACA,CAAA,gBAAM,QAAQ,EAAd;AACA,CAAA,yBAAM,MAAN,CAAa,IAAb,EAAmB,UAAC,KAAD,EAAQ,GAAR,EAAgB;AACjC,CAAA,oBAAM,GAAN,IAAa,KAAb;AACD,CAAA,aAFD;AAGA,CAAA,yBAAM,CAAN,CAAQ,KAAR,EAAe,SAAf;AACA,CAAA,uBAAW,SAAS,QAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;AACA,CAAA;AAAA,CAAA,iBAAO;AAAP,CAAA;AARY,CAAA;;AAAA,CAAA;AASb,CAAA;AACF,CAAA;AACF,CAAA,KApCD;;AAsCA,CAAA,WAAO,QAAP;AACD,CAAA,GArhBY;;;;;;;;;;;AA+hBb,CAAA,SA/hBa,mBA+hBJ,MA/hBI,EA+hBI,MA/hBJ,EA+hBY,EA/hBZ,EA+hBgB,IA/hBhB,EA+hBsB;AACjC,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAM,OAAO,CACX,KAAK,QAAL,KAAkB,SAAlB,GAA+B,OAAO,QAAP,KAAoB,SAApB,GAAgC,KAAK,QAArC,GAAgD,OAAO,QAAtF,GAAkG,KAAK,QAD5F,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0BA,aAAM,QAAN,CAAe,EAAf,KAAsBA,aAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;AAIA,CAAA,QAAI,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;AACpE,CAAA,WAAK,IAAL,CAAU,EAAV;AACD,CAAA;AACD,CAAA,WAAO,SAAS,KAAT,CAAeA,YAAf,EAAsB,IAAtB,CAAP;AACD,CAAA,GAziBY;AA2iBb,CAAA,WA3iBa,qBA2iBF,IA3iBE,EA2iBI;AACf,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,KAAK,MAAL,KAAgB,SAApB,EAA+B;AAC7B,CAAA,aAAO,EAAP;AACD,CAAA;AACD,CAAA,WAAOA,aAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;AACD,CAAA,GAjjBY;AAmjBb,CAAA,WAnjBa,qBAmjBF,MAnjBE,EAmjBM,IAnjBN,EAmjBY;AACvB,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,KAAK,MAAL,KAAgB,SAApB,EAA+B;AAC7B,CAAA,UAAI,OAAO,MAAP,KAAkB,SAAtB,EAAiC;AAC/B,CAAA,eAAO,KAAK,MAAZ;AACD,CAAA;AACD,CAAA,aAAO,OAAO,MAAd;AACD,CAAA;AACD,CAAA,WAAO,KAAK,MAAZ;AACD,CAAA,GA5jBY;;;;;;;;;;;;AAukBb,CAAA,MAvkBa,gBAukBP,MAvkBO,EAukBC,IAvkBD,EAukBO;AAAA,CAAA;;AAClB,CAAA,QAAM,QAAQ,IAAI,IAAJ,EAAd;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAM,UAAU,OAAO,IAAvB;AACA,CAAA,QAAM,QAAQ,OAAO,KAArB;AACA,CAAA,QAAM,UAAU,OAAO,OAAvB;AACA,CAAA,aAASA,aAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;AACA,CAAA,aAASA,aAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;AACA,CAAA,WAAO,IAAP,GAAc,OAAd;AACA,CAAA,WAAO,KAAP,GAAe,KAAf;AACA,CAAA,WAAO,OAAP,GAAiB,OAAjB;AACA,CAAA,QAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;AACxE,CAAA,aAAO,GAAP,IAAc,GAAd;AACD,CAAA;AACD,CAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;AACA,CAAA,QAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;AACA,CAAA,QAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;AAC7E,CAAA,aAAO,GAAP,IAAc,MAAd;AACD,CAAA;;AAED,CAAA,QAAM,cAAc,SAAd,WAAc,CAAC,IAAD,EAAU;AAC5B,CAAA,UAAM,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;AACA,CAAA,UAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;AAC3C,CAAA,YAAI,QAAK,GAAT,EAAc;AACZ,CAAA,kBAAK,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB;AACD,CAAA;AACD,CAAA,eAAO,IAAP;AACD,CAAA,OALD,MAKO;AACL,CAAA,YAAI,QAAK,KAAT,EAAgB;AACd,CAAA,kBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;AACD,CAAA;AACD,CAAA,eAAOA,aAAM,MAAN,CAAa,IAAb,CAAP;AACD,CAAA;AACF,CAAA,KAbD;;AAeA,CAAA,QAAI,CAAC,KAAK,IAAV,EAAgB;AACd,CAAA,YAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN;AACD,CAAA;;AAED,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,CAAA,eAAS,WAAW,MAApB;AACA,CAAA,UAAI,aAAa,QAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,QAAK,IAArD,CAAJ,EAAgE;AAC9D,CAAA,eAAO,QAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;AACD,CAAA;AACD,CAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EACJ,KADI,CACE,UAAC,GAAD;AAAA,CAAA,eAAS,QAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAT;AAAA,CAAA,OADF,CAAP;AAED,CAAA,KARI,EASJ,IATI,CASC,UAAC,QAAD,EAAc;AAClB,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAZI,CAAP;AAaD,CAAA,GA3nBY;;;;;;;;;;;;;;AAwoBb,CAAA,MAxoBa,gBAwoBP,GAxoBO,EAwoBF,IAxoBE,EAwoBI,MAxoBJ,EAwoBY,IAxoBZ,EAwoBkB;AAAA,CAAA;;AAC7B,CAAA,QAAI,WAAJ;AACA,CAAA,eAAW,SAAS,EAApB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,CAAA,WAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,CAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,YAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;AAEjB,CAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,MAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,CAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,CAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;AAElB,CAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAbI,CAAP;AAcD,CAAA,GAhqBY;;;;;;;;;;;;;;AA6qBb,CAAA,KA7qBa,eA6qBR,GA7qBQ,EA6qBH,IA7qBG,EA6qBG,MA7qBH,EA6qBW,IA7qBX,EA6qBiB;AAAA,CAAA;;AAC5B,CAAA,QAAI,WAAJ;AACA,CAAA,eAAW,SAAS,EAApB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,CAAA,WAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,CAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;AAGA,CAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,CAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;AAEjB,CAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,CAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,CAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,CAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,CAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;AAElB,CAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,CAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,CAAA,OADD,CAAP;AAED,CAAA,KAbI,CAAP;AAcD,CAAA,GArsBY;;;;;;;;;;;;;AAitBb,CAAA,gBAjtBa,0BAitBG,MAjtBH,EAitBW,MAjtBX,EAitBmB,IAjtBnB,EAitByB;AACpC,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACzC,CAAA,aAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;AACD,CAAA;AACD,CAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;AAC3C,CAAA,aAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;AACD,CAAA;AACD,CAAA,WAAO,MAAP;AACD,CAAA,GA1tBY;;;;;;;;;;;;;;;;AAyuBb,CAAA,eAzuBa,yBAyuBE,GAzuBF,EAyuBO,MAzuBP,EAyuBe,IAzuBf,EAyuBqB;AAChC,CAAA,WAAOA,aAAM,MAAN,CAAa,GAAb,CAAP;AACD,CAAA,GA3uBY;;;;;;;;;;;;;AAuvBb,CAAA,WAvvBa,qBAuvBF,MAvvBE,EAuvBM,IAvvBN,EAuvBY,IAvvBZ,EAuvBkB;AAC7B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AACpC,CAAA,aAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;AACD,CAAA;AACD,CAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;AACtC,CAAA,aAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;AACD,CAAA;AACD,CAAA,WAAO,IAAP;AACD,CAAA,GAhwBY;;;;;;;;;;;;;;;;AA+wBb,CAAA,KA/wBa,eA+wBR,MA/wBQ,EA+wBA,KA/wBA,EA+wBO,KA/wBP,EA+wBc,IA/wBd,EA+wBoB;AAC/B,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,QAAI,CAACA,aAAM,KAAN,CAAY,QAAZ,CAAqB,KAArB,CAAL,EAAkC;AAChC,CAAA,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD,CAAA;AACD,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,GAAlB,CAAsB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,EAAyC,KAAzC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,CAAA,GA3xBY;;;;;;;;;;;;;;AAwyBb,CAAA,QAxyBa,kBAwyBL,MAxyBK,EAwyBG,EAxyBH,EAwyBO,KAxyBP,EAwyBc,IAxyBd,EAwyBoB;AAC/B,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,EAA5C,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,CAAA,GA9yBY;;;;;;;;;;;;;;AA2zBb,CAAA,WA3zBa,qBA2zBF,MA3zBE,EA2zBM,KA3zBN,EA2zBa,KA3zBb,EA2zBoB,IA3zBpB,EA2zB0B;AACrC,CAAA,cAAU,QAAQ,EAAlB;AACA,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,SAAlB,CAA4B,IAA5B,CAAiC,IAAjC,EAAuC,MAAvC,EAA+C,KAA/C,EAAsD,KAAtD,EAA6D,IAA7D,CAAP;AACD,CAAA,GAn0BY;;;;;;;;;;;;;;;;;;;;AAs1Bb,CAAA,YAt1Ba,sBAs1BD,MAt1BC,EAs1BO,OAt1BP,EAs1BgB,IAt1BhB,EAs1BsB;AACjC,CAAA,aAAS,OAAO,EAAhB;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,CAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,CAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,OAAhD,EAAyD,IAAzD,CAAP;AACD,CAAA;AA51BY,CAAA,CAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA04BA,AAAO,CAAA,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;AACrC,CAAA,MAAI,CAAC,IAAD,IAAS,CAACA,aAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;AAClC,CAAA,UAAM,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;AACD,CAAA;AACD,CAAA,SAAO,UAAU,MAAV,EAAkB;AACvB,CAAA,QAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,CAAA,YAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;AACD,CAAA;AACD,CAAA,SAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,CAAA,aAAO,MAAP;AAAe,CAAA,KAAlE;AACA,CAAA,SAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,CAAA,aAAO,QAAP;AAAiB,CAAA,KAAxE;AACA,CAAA,SAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,CAAA,aAAOA,aAAM,MAAN,CAAa,GAAb,CAAP;AAA0B,CAAA,KAAtF;AACA,CAAA,WAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAAA,CAAA;;AAClC,CAAA,UAAIA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,CAAA,gBAAQ,EAAR;AACD,CAAA;AACD,CAAA,cAAQ,SAAS,EAAjB;AACA,CAAA,UAAI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAArB,IAAuC,MAAvD,CAAd;AACA,CAAA,UAAI,SAAS,EAAb;AACA,CAAA,mBAAM,MAAN,CAAa,MAAb,EAAqB,IAArB;AACA,CAAA,UAAI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAhD,EAA0D;AACxD,CAAA,cAAM,QAAN,GAAiB,OAAO,QAAxB;AACD,CAAA;AACD,CAAA,UAAI,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;AAC3C,CAAA,eAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;AACD,CAAA,OAFD,MAEO;AACL,CAAA,YAAI,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0BA,aAAM,MAAN,CAAa,EAAb,IAAmB,EAAnB,GAAwB,IAAlD,EAAwD,KAAxD,CAFS,CAAX;AAIA,CAAA,YAAIA,aAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;AACpB,CAAA,eAAK,IAAL,CAAU,EAAV;AACD,CAAA;AACD,CAAA,aAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;AACA,CAAA,eAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;AACD,CAAA;AACD,CAAA,aAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;AACA,CAAA,aAAO,MAAP,GAAgB,KAAK,IAArB;AACA,CAAA,mBAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;AACA,CAAA,aAAOA,aAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OADvB,EAEJ,IAFI,CAEC,UAAC,MAAD;AAAA,CAAA,eAAY,QAAQ,IAAR,CAAa,MAAb,CAAZ;AAAA,CAAA,OAFD,EAGJ,IAHI,CAGC,UAAC,IAAD,EAAU;AACd,CAAA,YAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,CAAA,eAAK,MAAL,CAAY,MAAZ,GAAqB,QAAK,IAA1B;AACD,CAAA;AACD,CAAA,eAAO,IAAP;AACD,CAAA,OARI,EASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QATxB,EASkC,MAAM,aAAN,IAAuB,KAAK,aAT9D,CAAP;AAUD,CAAA,KArCD;AAsCA,CAAA,WAAO,MAAP;AACD,CAAA,GA9CD;AA+CD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CD,AAAO,CAAA,SAAS,UAAT,CAAqB,IAArB,EAA2B;AAChC,CAAA,WAAS,OAAO,EAAhB;AACA,CAAA,SAAO,UAAU,MAAV,EAAkB;AACvB,CAAA,iBAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,CAAA,gBAAU,GAAV,EAAe,KAAf,EAAsB,MAAtB;AACD,CAAA,KAFD;AAGA,CAAA,WAAO,MAAP;AACD,CAAA,GALD;AAMD,CAAA;;;;;;;;;;;;;;;;AAgBD,AAAO,CAAA,IAAM,UAAU,gBAAhB;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 60f62f3..9461adc 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-beta.8 - Homepage +* @version 3.0.0-rc.1 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,e){return e={exports:{}},t(e,e.exports),e.exports}function r(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function i(t){e.utils.classCallCheck(this,i),e.Component.call(this),t||(t={}),e.utils.fillIn(t,T),e.utils.fillIn(this,t)}function o(t){return null!=t&&""!==t}function a(t,e){return e||(e=""),t.filter(o).join(e)}function s(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,S),i.call(this,t)}function c(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":v(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),u={};if(e.utils.fillIn(u,n),!i.hasOwnProperty("endpoint")&&u.endpoint&&(i.endpoint=u.endpoint),"function"==typeof i.getEndpoint)u.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),u.url=s.apply(null,f)}return u.method=u.method||"GET",u.mapper=this.name,e.utils.deepMixIn(u,i),e.utils.resolve(u).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){c(e,t)(n)}),n}}var d="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h=n(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(d,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){this.defaults=o.merge({},t),this.interceptors={request:new s,response:new s}}var i=n(2),o=n(3),a=n(5),s=n(14),u=n(15),f=n(16),l=n(17),c=n(9);r.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:"get"},t),t.baseURL&&!u(t.url)&&(t.url=f(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=c(t.data,t.headers,t.transformRequest),t.headers=o.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[a,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(i),d=t.exports=l(r.prototype.request,p);d.request=l(r.prototype.request,p),d.Axios=r,d.defaults=p.defaults,d.interceptors=p.interceptors,d.create=function(t){return new r(t)},d.all=function(t){return Promise.all(t)},d.spread=n(18),o.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))},d[t]=l(r.prototype[t],p)}),o.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))},d[t]=l(r.prototype[t],p)})},function(t,e,n){function r(t,e){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var i=n(3),o=n(4),a=/^\)\]\}',?\n/,s={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(t,e){return o(e,"Content-Type"),i.isFormData(t)||i.isArrayBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(r(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):i.isObject(t)?(r(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(a,"");try{t=JSON.parse(t)}catch(t){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:i.merge(s),post:i.merge(s),put:i.merge(s)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}}},function(t,e){function n(t){return"[object Array]"===w.call(t)}function r(t){return"[object ArrayBuffer]"===w.call(t)}function i(t){return"undefined"!=typeof FormData&&t instanceof FormData}function o(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function a(t){return"string"==typeof t}function s(t){return"number"==typeof t}function u(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===w.call(t)}function c(t){return"[object File]"===w.call(t)}function p(t){return"[object Blob]"===w.call(t)}function d(t){return"[object Function]"===w.call(t)}function h(t){return f(t)&&d(t.pipe)}function y(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function v(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||n(t)||(t=[t]),n(t))for(var r=0,i=t.length;r>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e){t.exports=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(n):t(n)}},function(t,e,n){var r=n(3);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e,n){function r(){this.handlers=[]}var i=n(3);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,E&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n; -},sum:function(t,n,r,o){if(r||(r={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,r),o.params=this.queryTransform(t,o.params,o),i.prototype.sum.call(this,t,n,r,o)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),i.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,o){return r||(r={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,r),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),i.prototype.updateAll.call(this,t,n,r,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),i.prototype.updateMany.call(this,t,e,n)}});var P={beta:8,full:"3.0.0-beta.8",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=c,t.addActions=p,t.version=P,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function s(t,e){return e||(e=""),t.filter(a).join(e)}function u(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),s=t.exports=r();s.Axios=a,s.create=function(t){return r(t)},s.all=function(t){return Promise.all(t)},s.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return"string"==typeof t}function u(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),s=n(16),u=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||s(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(u("Network Error",t)),p=null},p.ontimeout=function(){l(u("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||s(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",s=0,u=i;o.charAt(0|s)||(u="=",s%1);a+=u.charAt(63&e>>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){ +return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.1",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index a653973..4ca1f65 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","transformData","prototype","baseURL","withCredentials","headers","transformRequest","common","chain","undefined","promise","Promise","interceptor","unshift","fulfilled","rejected","shift","defaultInstance","create","all","promises","spread","setContentTypeIfUnset","isUndefined","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isFormData","isArrayBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","JSON","stringify","transformResponse","parse","e","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","FormData","ArrayBuffer","isView","isNumber","isDate","isFunction","pipe","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","assignValue","Object","normalizedName","toUpperCase","XMLHttpRequest","process","buildURL","parseHeaders","isURLSameOrigin","btoa","settle","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","code","cookies","xsrfValue","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","serializedParams","parsed","split","line","substr","fns","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","message","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","h","relativeURL","thisArg","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","error","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","beta","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","interopDefault","ex","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","extend","create","all","promises","Promise","spread","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","merge","assignValue","a","b","thisArg","Object","defaults","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","baseURL","chain","undefined","promise","interceptor","unshift","fulfilled","rejected","shift","setContentTypeIfUnset","headers","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","common","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","normalizedName","toUpperCase","handlers","use","eject","h","transformData","XMLHttpRequest","process","error","fns","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","enhanceError","message","code","serializedParams","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","relativeURL","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index 887ed1f..b3fb73a 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,6 +1,6 @@ /*! * js-data-fetch -* @version 3.0.0-beta.8 - Homepage +* @version 3.0.0-rc.1 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -962,6 +962,7 @@ var record = void 0, op = void 0; + var meta = {}; opts || (opts = {}); opts.with || (opts.with = []); @@ -972,14 +973,16 @@ _this7.dbg(op, mapper, id, opts); return jsData.utils.resolve(_this7._find(mapper, id, opts)); }).then(function (results) { - var _results6 = slicedToArray(results, 1); + var _results6 = slicedToArray(results, 2); var _record = _results6[0]; + var _meta = _results6[1]; if (!_record) { return; } record = _record; + meta = _meta; var tasks = []; jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { @@ -1004,7 +1007,7 @@ return jsData.utils.Promise.all(tasks); }).then(function () { - var response = new Response(record, {}, 'find'); + var response = new Response(record, meta, 'find'); response.found = record ? 1 : 0; response = _this7.respond(response, opts); @@ -1043,6 +1046,7 @@ opts.with || (opts.with = []); var records = []; + var meta = {}; var op = void 0; var activeWith = opts._activeWith; @@ -1062,12 +1066,14 @@ _this8.dbg(op, mapper, query, opts); return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); }).then(function (results) { - var _results7 = slicedToArray(results, 1); + var _results7 = slicedToArray(results, 2); var _records = _results7[0]; + var _meta = _results7[1]; _records || (_records = []); records = _records; + meta = _meta; var tasks = []; jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { var task = void 0; @@ -1090,7 +1096,7 @@ }); return jsData.utils.Promise.all(tasks); }).then(function () { - var response = new Response(records, {}, 'findAll'); + var response = new Response(records, meta, 'findAll'); response.found = records.length; response = _this8.respond(response, opts); @@ -2780,8 +2786,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - beta: 8, - full: '3.0.0-beta.8', + full: '3.0.0-rc.1', major: 3, minor: 0, patch: 0 @@ -2795,4 +2800,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); })); -//# sourceMappingURL=js-data-fetch.js.map \ No newline at end of file +//# sourceMappingURL=js-data-fetch.js.map diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index cddf228..5fc3af6 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record] = results\n if (!_record) {\n return\n }\n record = _record\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, {}, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records] = results\n _records || (_records = [])\n records = _records\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, {}, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index e88dd6d..9eb3973 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-beta.8 - Homepage +* @version 3.0.0-rc.1 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":c(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function h(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={beta:8,full:"3.0.0-beta.8",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=h,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={full:"3.0.0-rc.1",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index 0948208..a5bf6f7 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","beta","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 4118dfb..8df7ae6 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1205,8 +1205,7 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - beta: 8, - full: '3.0.0-beta.8', + full: '3.0.0-rc.1', major: 3, minor: 0, patch: 0 @@ -1216,4 +1215,4 @@ exports.HttpAdapter = HttpAdapter; exports.addAction = addAction; exports.addActions = addActions; exports.version = version; -//# sourceMappingURL=js-data-http-node.js.map \ No newline at end of file +//# sourceMappingURL=js-data-http-node.js.map diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index babfd1c..d1a33ae 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":";;;;;;;;;;;;;AAGA,4BAAA;AACA,AAMA,IAAI,WAAW,KAAf;;AAEA,IAAI;aACS,UAAU,OAAO,KAA5B;CADF,CAEE,OAAO,CAAP,EAAU;;AAEZ,SAAS,aAAT,CAAwB,KAAxB,EAA+B;SACrB,SAAS,IAAT,IAAiB,UAAU,EAAnC;;AAEF,SAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;gBACjB,YAAY,EAA1B;SACO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;;AAEF,SAAS,QAAT,GAA4B;oCAAN,IAAM;QAAA;;;MACtB,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;SACO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;;;AAGF,SAAS,MAAT,CAAiB,GAAjB,EAAsB;SACb,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;;;AAUF,SAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;MAC1B,CAAC,MAAL,EAAa;WACJ,GAAP;;;MAGI,QAAQ,EAAd;;eAEM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;QACnC,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;;;QAG5C,CAACA,aAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;YACjB,CAAC,GAAD,CAAN;;;QAGE,OAAJ,CAAY,UAAU,CAAV,EAAa;UACnB,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAAhC,EAAiD;YAC3C,EAAE,WAAF,EAAJ;OADF,MAEO,IAAIA,aAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;YACxBA,aAAM,MAAN,CAAa,CAAb,CAAJ;;YAEI,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;KANF;GARF;;MAkBI,MAAM,MAAN,GAAe,CAAnB,EAAsB;WACb,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;;;SAGK,GAAP;;;AAGF,IAAM,WAAW;;;;;;YAML,EANK;;;;;;;sBAaK,KAbL;;;;;;QAmBT,KAnBS;;;;;;cAyBH,EAzBG;;;;;;UA+BP,EA/BO;;;;;;;YAsCL;CAtCZ;;;;;;;;;;;;;;;;AAuDA,AAAO,SAAS,WAAT,CAAsB,IAAtB,EAA4B;eAC3B,cAAN,CAAqB,IAArB,EAA2B,WAA3B;;WAES,OAAO,EAAhB;;eAEM,MAAN,CAAa,IAAb,EAAmB,QAAnB;wBACQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;;;;;;;;AAQFC,sBAAQ,MAAR,CAAe;eACA,WADA;;;;;;;;;;YAWHC,mBAXG;;;;;;;;;;YAqBHA,mBArBG;;;;;;;;;aA8BFA,mBA9BE;;;;;;;;;;;aAyCFA,mBAzCE;;;;;;;;;;;YAoDHA,mBApDG;;;;;;;;;aA6DFC,kBA7DE;;;;;;;;;aAsEFA,kBAtEE;;;;;;;;cA8EDA,kBA9EC;;;;;;;;;;cAwFDA,kBAxFC;;;;;;;;;;aAkGFA,kBAlGE;;QAAA,kBAoGL,MApGK,EAoGG,KApGH,EAoGU,IApGV,EAoGgB;;;WACpB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,MAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GArGW;SAAA,mBA2GJ,MA3GI,EA2GI,KA3GJ,EA2GW,IA3GX,EA2GiB;;;WACrB,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAJA,CAAP;GA5GW;aAAA,uBAmHA,MAnHA,EAmHQ,KAnHR,EAmHe,IAnHf,EAmHqB;;;WACzB,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAJA,CAAP;GApHW;UAAA,oBA2HH,MA3HG,EA2HK,EA3HL,EA2HS,IA3HT,EA2He;;;WACnB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GA5HW;aAAA,uBAkIA,MAlIA,EAkIQ,KAlIR,EAkIe,IAlIf,EAkIqB;;;WACzB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GAnIW;MAAA,gBAyIP,MAzIO,EAyIC,IAzID,EAyIO,QAzIP,EAyIiB;WACrB,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;GA1IW;OAAA,iBA6IN,MA7IM,EA6IE,EA7IF,EA6IM,IA7IN,EA6IY;;;WAChB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GA9IW;UAAA,oBAoJH,MApJG,EAoJK,KApJL,EAoJY,IApJZ,EAoJkB;;;WACtB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GArJW;MAAA,gBA2JP,MA3JO,EA2JC,KA3JD,EA2JQ,KA3JR,EA2Je,IA3Jf,EA2JqB;;;WACzB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAHA,CAAP;GA5JW;SAAA,mBAkKJ,MAlKI,EAkKI,EAlKJ,EAkKQ,KAlKR,EAkKe,IAlKf,EAkKqB;;;WACzB,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAJA,CAAP;GAnKW;YAAA,sBA0KD,MA1KC,EA0KO,KA1KP,EA0Kc,KA1Kd,EA0KqB,IA1KrB,EA0K2B;;;WAC/B,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAJA,CAAP;GA3KW;aAAA,uBAkLA,MAlLA,EAkLQ,OAlLR,EAkLiB,IAlLjB,EAkLuB;;;WAC3B,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;KAJA,CAAP;GAnLW;;;;;;;;;;;;;;;OAAA,iBAsMN,MAtMM,EAsME,KAtMF,EAsMS,IAtMT,EAsMe;cAChB,QAAQ,EAAlB;aACS,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,CAAY,KAAZ,GAAoB,IAApB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;iBACM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;WACOF,sBAAQ,SAAR,CAAkB,KAAlB,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,MAAnC,EAA2C,KAA3C,EAAkD,IAAlD,CAAP;GA9MW;;;;;;;;;;;;;;;QAAA,kBA6NL,MA7NK,EA6NG,KA7NH,EA6NU,IA7NV,EA6NgB;aAClB,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,KAA5C,EAAmD,IAAnD,CAAP;GAlOW;;;;;;;;;;;;;;;YAAA,sBAiPD,MAjPC,EAiPO,KAjPP,EAiPc,IAjPd,EAiPoB;aACtB,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;GAtPW;;;;;;;;;;;;;;KAAA,eAoQR,GApQQ,EAoQH,MApQG,EAoQK,IApQL,EAoQW;;;QAClB,WAAJ;eACW,SAAS,EAApB;aACS,OAAO,EAAhB;WACO,GAAP,GAAa,OAAO,OAAO,GAA3B;WACO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;;SAGK,KAAK,EAAL,GAAU,WAAf;WACOD,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;eAER,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;WACK,KAAK,EAAL,GAAU,KAAf;cACK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;aACO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;KANG,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;WAEb,KAAK,EAAL,GAAU,UAAf;aACOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;OADD,CAAP;KAXG,CAAP;GA7QW;;;;;;;;;;;;;;aAAA,uBAwSA,MAxSA,EAwSQ,QAxSR,EAwSkB,IAxSlB,EAwSwB;aAC1B,OAAO,EAAhB;QACIA,aAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;aAC/B,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;;QAEEA,aAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;aACjC,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;;QAEE,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;aACxC,SAAS,IAAhB;;WAEK,QAAP;GAnTW;;;;;;;;;;;;;;;SAAA,mBAkUJ,MAlUI,EAkUI,EAlUJ,EAkUQ,IAlUR,EAkUc;aAChB,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOC,sBAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,EAA7C,EAAiD,IAAjD,CAAP;GAvUW;;;;;;;;;;;;;;;YAAA,sBAsVD,MAtVC,EAsVO,KAtVP,EAsVc,IAtVd,EAsVoB;cACrB,QAAQ,EAAlB;aACS,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;iBACM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;GA7VW;;;;;;;;;;OAAA,mBAuWG;QACV,OAAJ,EAAa;;;2BACH,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;;GAzWS;;;;;;;;;;;;;;;;OAAA;;;;;;;;;;cA0XN,MA1XM,EA0XE,IA1XF,EA0XQ;QACb,gBAAgB;cACZ,OAAO,MADK;;eAGX,IAAI,OAAJ,CAAY,OAAO,OAAnB;KAHX;;QAMI,OAAO,IAAX,EAAiB;oBACD,IAAd,GAAqBD,aAAM,MAAN,CAAa,OAAO,IAApB,CAArB;;;WAGK,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAZ,EAAiD,aAAjD,CAAN,EACJ,IADI,CACC,UAAC,QAAD,EAAc;eACT,MAAT,GAAkB;gBACR,OAAO,MADC;aAEX,OAAO;OAFd;aAIO,SAAS,IAAT,GACJ,IADI,CACC,UAAC,IAAD,EAAU;iBACL,IAAT,GAAgB,IAAhB;eACO,QAAP;OAHG,CAAP;KANG,CAAP;GArYW;;;;;;;;;;;;;;;MAAA,gBA+ZP,MA/ZO,EA+ZC,EA/ZD,EA+ZK,IA/ZL,EA+ZW;aACb,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOC,sBAAQ,SAAR,CAAkB,IAAlB,CAAuB,IAAvB,CAA4B,IAA5B,EAAkC,MAAlC,EAA0C,EAA1C,EAA8C,IAA9C,CAAP;GApaW;;;;;;;;;;;;;;;SAAA,mBAmbJ,MAnbI,EAmbI,KAnbJ,EAmbW,IAnbX,EAmbiB;cAClB,QAAQ,EAAlB;aACS,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;iBACM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;WACOA,sBAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,KAA7C,EAAoD,IAApD,CAAP;GA1bW;;;;;;;;;;;;;KAAA,eAucR,GAvcQ,EAucH,MAvcG,EAucK,IAvcL,EAucW;;;QAClB,WAAJ;eACW,SAAS,EAApB;aACS,OAAO,EAAhB;WACO,GAAP,GAAa,OAAO,OAAO,GAA3B;WACO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;SAGK,KAAK,EAAL,GAAU,WAAf;WACOD,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;eAER,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;WACK,KAAK,EAAL,GAAU,KAAf;cACK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;aACO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;KANG,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;WAEb,KAAK,EAAL,GAAU,UAAf;aACOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;OADD,CAAP;KAXG,CAAP;GAhdW;;;;;;;;;;;aAAA,uBAweA,MAxeA,EAweQ,EAxeR,EAweY,IAxeZ,EAwekB;;;aACpB,OAAO,EAAhB;SACK,MAAL,GAAcA,aAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;QACM,eAAe,OAAO,YAAP,IAAuB,EAA5C;QACI,WAAWA,aAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoCA,aAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;iBAEa,OAAb,CAAqB,UAAC,GAAD,EAAS;UACxB,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;;;UAGzC,aAAJ;UACM,YAAY,IAAI,UAAtB;UACM,YAAY,IAAI,WAAJ,EAAlB;UACI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;UAEI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;YAC9C,aAAa,KAAjB,EAAwB;iBACf,KAAK,MAAL,CAAY,SAAZ,CAAP;;eAEK,KAAP;OAJF,MAKO;eACE,KAAK,MAAL,CAAY,SAAZ,CAAP;;YAEIA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;iBACf,EAAP;;;YAGE,IAAJ,EAAU;qBACG,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0BA,aAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;;;YAGE,QAAJ,EAAc;;mBACL,KAAK,QAAZ;gBACM,QAAQ,EAAd;yBACM,MAAN,CAAa,IAAb,EAAmB,UAAC,KAAD,EAAQ,GAAR,EAAgB;oBAC3B,GAAN,IAAa,KAAb;aADF;yBAGM,CAAN,CAAQ,KAAR,EAAe,SAAf;uBACW,SAAS,QAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;;iBACO;;;;;;;KAjCb;;WAsCO,QAAP;GAphBW;;;;;;;;;;;SAAA,mBA+hBJ,MA/hBI,EA+hBI,MA/hBJ,EA+hBY,EA/hBZ,EA+hBgB,IA/hBhB,EA+hBsB;aACxB,OAAO,EAAhB;QACM,OAAO,CACX,KAAK,QAAL,KAAkB,SAAlB,GAA+B,OAAO,QAAP,KAAoB,SAApB,GAAgC,KAAK,QAArC,GAAgD,OAAO,QAAtF,GAAkG,KAAK,QAD5F,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0BA,aAAM,QAAN,CAAe,EAAf,KAAsBA,aAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;QAII,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;WAC/D,IAAL,CAAU,EAAV;;WAEK,SAAS,KAAT,CAAeA,YAAf,EAAsB,IAAtB,CAAP;GAxiBW;WAAA,qBA2iBF,IA3iBE,EA2iBI;aACN,OAAO,EAAhB;QACI,KAAK,MAAL,KAAgB,SAApB,EAA+B;aACtB,EAAP;;WAEKA,aAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;GAhjBW;WAAA,qBAmjBF,MAnjBE,EAmjBM,IAnjBN,EAmjBY;aACd,OAAO,EAAhB;QACI,KAAK,MAAL,KAAgB,SAApB,EAA+B;UACzB,OAAO,MAAP,KAAkB,SAAtB,EAAiC;eACxB,KAAK,MAAZ;;aAEK,OAAO,MAAd;;WAEK,KAAK,MAAZ;GA3jBW;;;;;;;;;;;;MAAA,gBAukBP,MAvkBO,EAukBC,IAvkBD,EAukBO;;;QACZ,QAAQ,IAAI,IAAJ,EAAd;aACS,OAAO,EAAhB;QACM,UAAU,OAAO,IAAvB;QACM,QAAQ,OAAO,KAArB;QACM,UAAU,OAAO,OAAvB;aACSA,aAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;aACSA,aAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;WACO,IAAP,GAAc,OAAd;WACO,KAAP,GAAe,KAAf;WACO,OAAP,GAAiB,OAAjB;QACI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;aACjE,GAAP,IAAc,GAAd;;WAEK,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;QACM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;QACI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;aACtE,GAAP,IAAc,MAAd;;;QAGI,cAAc,SAAd,WAAc,CAAC,IAAD,EAAU;UACtB,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;UACI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;YACvC,QAAK,GAAT,EAAc;kBACP,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB;;eAEK,IAAP;OAJF,MAKO;YACD,QAAK,KAAT,EAAgB;kBACT,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;;eAEKA,aAAM,MAAN,CAAa,IAAb,CAAP;;KAXJ;;QAeI,CAAC,KAAK,IAAV,EAAgB;YACR,IAAI,KAAJ,CAAU,4DAAV,CAAN;;;WAGKA,aAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;eACR,WAAW,MAApB;UACI,aAAa,QAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,QAAK,IAArD,CAAJ,EAAgE;eACvD,QAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;;aAEK,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EACJ,KADI,CACE,UAAC,GAAD;eAAS,QAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAT;OADF,CAAP;KANG,EASJ,IATI,CASC,UAAC,QAAD,EAAc;aACXA,aAAM,OAAN,CAAc,QAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;OADD,CAAP;KAVG,CAAP;GA9mBW;;;;;;;;;;;;;;MAAA,gBAwoBP,GAxoBO,EAwoBF,IAxoBE,EAwoBI,MAxoBJ,EAwoBY,IAxoBZ,EAwoBkB;;;QACzB,WAAJ;eACW,SAAS,EAApB;aACS,OAAO,EAAhB;WACO,GAAP,GAAa,OAAO,OAAO,GAA3B;WACO,IAAP,GAAc,QAAQ,OAAO,IAA7B;WACO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;;SAGK,KAAK,EAAL,GAAU,YAAf;WACOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;eAER,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;WACK,KAAK,EAAL,GAAU,MAAf;cACK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;aACO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;KANG,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;WAEb,KAAK,EAAL,GAAU,WAAf;aACOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;OADD,CAAP;KAXG,CAAP;GAlpBW;;;;;;;;;;;;;;KAAA,eA6qBR,GA7qBQ,EA6qBH,IA7qBG,EA6qBG,MA7qBH,EA6qBW,IA7qBX,EA6qBiB;;;QACxB,WAAJ;eACW,SAAS,EAApB;aACS,OAAO,EAAhB;WACO,GAAP,GAAa,OAAO,OAAO,GAA3B;WACO,IAAP,GAAc,QAAQ,OAAO,IAA7B;WACO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;;SAGK,KAAK,EAAL,GAAU,WAAf;WACOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;;eAER,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;WACK,KAAK,EAAL,GAAU,KAAf;cACK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;aACO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;KANG,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;;WAEb,KAAK,EAAL,GAAU,UAAf;aACOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;OADD,CAAP;KAXG,CAAP;GAvrBW;;;;;;;;;;;;;gBAAA,0BAitBG,MAjtBH,EAitBW,MAjtBX,EAitBmB,IAjtBnB,EAitByB;aAC3B,OAAO,EAAhB;QACIA,aAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;aAClC,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;;QAEEA,aAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;aACpC,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;;WAEK,MAAP;GAztBW;;;;;;;;;;;;;;;;eAAA,yBAyuBE,GAzuBF,EAyuBO,MAzuBP,EAyuBe,IAzuBf,EAyuBqB;WACzBA,aAAM,MAAN,CAAa,GAAb,CAAP;GA1uBW;;;;;;;;;;;;;WAAA,qBAuvBF,MAvvBE,EAuvBM,IAvvBN,EAuvBY,IAvvBZ,EAuvBkB;aACpB,OAAO,EAAhB;QACIA,aAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;aAC7B,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;;QAEEA,aAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;aAC/B,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;;WAEK,IAAP;GA/vBW;;;;;;;;;;;;;;;;KAAA,eA+wBR,MA/wBQ,EA+wBA,KA/wBA,EA+wBO,KA/wBP,EA+wBc,IA/wBd,EA+wBoB;cACrB,QAAQ,EAAlB;aACS,OAAO,EAAhB;QACI,CAACA,aAAM,KAAN,CAAY,QAAZ,CAAqB,KAArB,CAAL,EAAkC;YAC1B,IAAI,KAAJ,CAAU,yBAAV,CAAN;;SAEG,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;iBACM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;WACOC,sBAAQ,SAAR,CAAkB,GAAlB,CAAsB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,EAAyC,KAAzC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;GA1xBW;;;;;;;;;;;;;;QAAA,kBAwyBL,MAxyBK,EAwyBG,EAxyBH,EAwyBO,KAxyBP,EAwyBc,IAxyBd,EAwyBoB;aACtB,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,EAA5C,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;GA7yBW;;;;;;;;;;;;;;WAAA,qBA2zBF,MA3zBE,EA2zBM,KA3zBN,EA2zBa,KA3zBb,EA2zBoB,IA3zBpB,EA2zB0B;cAC3B,QAAQ,EAAlB;aACS,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;iBACM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,SAAlB,CAA4B,IAA5B,CAAiC,IAAjC,EAAuC,MAAvC,EAA+C,KAA/C,EAAsD,KAAtD,EAA6D,IAA7D,CAAP;GAl0BW;;;;;;;;;;;;;;;;;;;;YAAA,sBAs1BD,MAt1BC,EAs1BO,OAt1BP,EAs1BgB,IAt1BhB,EAs1BsB;aACxB,OAAO,EAAhB;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;SACK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;SACK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;WACOA,sBAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,OAAhD,EAAyD,IAAzD,CAAP;;CA31BJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA04BA,AAAO,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;MACjC,CAAC,IAAD,IAAS,CAACD,aAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;UAC5B,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;;SAEK,UAAU,MAAV,EAAkB;QACnB,OAAO,IAAP,CAAJ,EAAkB;YACV,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;;SAEG,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;aAAS,MAAP;KAAnD;SACK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;aAAS,QAAP;KAAvD;SACK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;aAASA,aAAM,MAAN,CAAa,GAAb,CAAP;KAA5D;WACO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;;;UAC9BA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;gBACd,EAAR;;cAEM,SAAS,EAAjB;UACI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAArB,IAAuC,MAAvD,CAAd;UACI,SAAS,EAAb;mBACM,MAAN,CAAa,MAAb,EAAqB,IAArB;UACI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAhD,EAA0D;cAClD,QAAN,GAAiB,OAAO,QAAxB;;UAEE,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;eACpC,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;OADF,MAEO;YACD,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0BA,aAAM,MAAN,CAAa,EAAb,IAAmB,EAAnB,GAAwB,IAAlD,EAAwD,KAAxD,CAFS,CAAX;YAIIA,aAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;eACf,IAAL,CAAU,EAAV;;aAEG,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;eACO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;;aAEK,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;aACO,MAAP,GAAgB,KAAK,IAArB;mBACM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;aACOA,aAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OADvB,EAEJ,IAFI,CAEC,UAAC,MAAD;eAAY,QAAQ,IAAR,CAAa,MAAb,CAAZ;OAFD,EAGJ,IAHI,CAGC,UAAC,IAAD,EAAU;YACV,QAAQ,KAAK,MAAjB,EAAyB;eAClB,MAAL,CAAY,MAAZ,GAAqB,QAAK,IAA1B;;eAEK,IAAP;OAPG,EASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QATxB,EASkC,MAAM,aAAN,IAAuB,KAAK,aAT9D,CAAP;KA3BF;WAsCO,MAAP;GA7CF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FF,AAAO,SAAS,UAAT,CAAqB,IAArB,EAA2B;WACvB,OAAO,EAAhB;SACO,UAAU,MAAV,EAAkB;iBACjB,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;gBAC7B,GAAV,EAAe,KAAf,EAAsB,MAAtB;KADF;WAGO,MAAP;GAJF;;;;;;;;;;;;;;;;;AAsBF,AAAO,IAAM,UAAU,gBAAhB;;;;;"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file From c597743a2646d06a66961331ec2bdedc30b996e6 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Sat, 13 Aug 2016 21:35:38 -0700 Subject: [PATCH 08/10] 3.0.0-rc.2 --- dist/js-data-http.js | 178 ++++++++++++++++++----------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 178 ++++++++++++++++++----------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 174 +++++++++++++++++----------- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 338 insertions(+), 212 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 243b506..0e141d2 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-rc.1 - Homepage +* @version 3.0.0-rc.2 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -1582,7 +1582,7 @@ */ function Adapter(opts) { jsData.utils.classCallCheck(this, Adapter); - jsData.Component.call(this); + jsData.Component.call(this, opts); opts || (opts = {}); jsData.utils.fillIn(opts, DEFAULTS$1); jsData.utils.fillIn(this, opts); @@ -3058,42 +3058,68 @@ } var DEFAULTS = { - // Default and user-defined settings /** + * Set a base path in order to use absolute URLs instead of relative URLs. + * + * @example + * const httpAdapter = new HttpAdapter({ + * basePath: 'https://mydomain.com' + * }) + * * @name HttpAdapter#basePath * @type {string} + * @since 3.0.0 */ basePath: '', /** + * Ensure that the request url has a trailing forward slash. + * * @name HttpAdapter#forceTrailingSlash * @type {boolean} * @default false + * @since 3.0.0 */ forceTrailingSlash: false, /** + * The HTTP function that actually makes the HTTP request. By default this is + * `axios`. + * * @name HttpAdapter#http * @type {Function} + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ http: axios$1, /** + * Default configuration options to be mixed into the `config` argument passed + * to {@link HttpAdapter#http}. + * * @name HttpAdapter#httpConfig * @type {Object} + * @since 3.0.0 */ httpConfig: {}, /** + * Add a suffix to the request url, e.g. ".json". + * * @name HttpAdapter#suffix * @type {string} + * @since 3.0.0 */ suffix: '', /** + * Use `window.fetch` if available. + * * @name HttpAdapter#useFetch * @type {boolean} * @default false + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-windowfetch */ useFetch: false }; @@ -3101,16 +3127,34 @@ /** * HttpAdapter class. * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * * @class HttpAdapter * @extends Adapter * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http */ function HttpAdapter(opts) { jsData.utils.classCallCheck(this, HttpAdapter); @@ -3316,8 +3360,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ count: function count(mapper, query, opts) { @@ -3340,8 +3384,8 @@ * @param {Object} mapper The mapper. * @param {Object} props Properties to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ create: function create(mapper, props, opts) { @@ -3361,8 +3405,8 @@ * @param {Object} mapper The mapper. * @param {Array} props Array of property objects to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ createMany: function createMany(mapper, props, opts) { @@ -3446,8 +3490,8 @@ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroy: function destroy(mapper, id, opts) { @@ -3467,8 +3511,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { @@ -3553,8 +3597,8 @@ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ find: function find(mapper, id, opts) { @@ -3574,8 +3618,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ findAll: function findAll(mapper, query, opts) { @@ -3590,7 +3634,7 @@ /** - * TODO + * Make a GET request. * * @name HttpAdapter#GET * @method @@ -3629,9 +3673,9 @@ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO + * @param {Object} mapper The Mapper. + * @param {*} id The primary key, if any. + * @param {boolean} opts Configuration options. * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { @@ -3693,9 +3737,9 @@ /** * @name HttpAdapter#getPath * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO + * @param {string} method The method being executed. + * @param {Object} mapper The Mapper. + * @param {(string|number)?} id The primary key, if any. * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { @@ -3760,7 +3804,7 @@ var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { if (_this15.log) { - _this15.dbg('debug', str, data); + _this15.dbg(str, data); } return data; } else { @@ -3792,13 +3836,13 @@ /** - * TODO + * Make a POST request. * * @name HttpAdapter#POST * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -3831,13 +3875,13 @@ /** - * TODO + * Make a PUT request. * * @name HttpAdapter#PUT * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -3870,13 +3914,14 @@ /** - * TODO + * Transform the querystring object before it is serialized. This doesn't do + * anything by default. * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {*} params The querystring object. + * @param {*} opts Configuration options * @return {*} Transformed params. */ queryTransform: function queryTransform(mapper, params, opts) { @@ -3910,13 +3955,13 @@ /** - * TODO + * Serialize request data. This doesn't do anything by default. * * @name HttpAdapter#serialize * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {Object} data The request payload. + * @param {*} opts Configuration options. * @return {*} Serialized data. */ serialize: function serialize(mapper, data, opts) { @@ -3940,8 +3985,8 @@ * @param {string} field The field to sum. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ sum: function sum(mapper, field, query, opts) { @@ -3960,13 +4005,13 @@ /** - * TODO + * Perform an update. Makes a PUT request by default. * * @name HttpAdapter#update * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO + * @param {Object} mapper The Mapper for the request. + * @param {*} id The primary key of the record being updated. + * @param {*} props The update payload. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -3980,13 +4025,14 @@ /** - * TODO + * Perform an update against records that match the selection query. Makes a + * PUT request by default. * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO + * @param {Object} mapper The Mapper for the request. + * @param {Object} props The update payload. + * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -4002,20 +4048,16 @@ /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. + * Update multiple individual records in a batch. * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The mapper. + * @param {Object} mapper The Mapper for the request. * @param {Array} records Array of property objects to send as the payload. + * Each must contain the primary key of the record to be updated. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { @@ -4192,7 +4234,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.1', + full: '3.0.0-rc.2', major: 3, minor: 0, patch: 0 diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index df9b8b5..dad0550 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 9461adc..0f2fd27 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-rc.1 - Homepage +* @version 3.0.0-rc.2 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function s(t,e){return e||(e=""),t.filter(a).join(e)}function u(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),s=t.exports=r();s.Axios=a,s.create=function(t){return r(t)},s.all=function(t){return Promise.all(t)},s.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return"string"==typeof t}function u(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),s=n(16),u=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||s(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(u("Network Error",t)),p=null},p.ontimeout=function(){l(u("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||s(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",s=0,u=i;o.charAt(0|s)||(u="=",s%1);a+=u.charAt(63&e>>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){ -return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.1",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function s(t,e){return e||(e=""),t.filter(a).join(e)}function u(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),s=t.exports=r();s.Axios=a,s.create=function(t){return r(t)},s.all=function(t){return Promise.all(t)},s.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return"string"==typeof t}function u(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),s=n(16),u=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||s(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(u("Network Error",t)),p=null},p.ontimeout=function(){l(u("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||s(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",s=0,u=i;o.charAt(0|s)||(u="=",s%1);a+=u.charAt(63&e>>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e, +a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.2",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index 4ca1f65..a732621 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","interopDefault","ex","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","extend","create","all","promises","Promise","spread","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","merge","assignValue","a","b","thisArg","Object","defaults","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","baseURL","chain","undefined","promise","interceptor","unshift","fulfilled","rejected","shift","setContentTypeIfUnset","headers","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","common","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","normalizedName","toUpperCase","handlers","use","eject","h","transformData","XMLHttpRequest","process","error","fns","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","enhanceError","message","code","serializedParams","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","relativeURL","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","interopDefault","ex","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","extend","create","all","promises","Promise","spread","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","merge","assignValue","a","b","thisArg","Object","defaults","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","baseURL","chain","undefined","promise","interceptor","unshift","fulfilled","rejected","shift","setContentTypeIfUnset","headers","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","common","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","normalizedName","toUpperCase","handlers","use","eject","h","transformData","XMLHttpRequest","process","error","fns","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","enhanceError","message","code","serializedParams","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","relativeURL","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index b3fb73a..2979bf4 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,6 +1,6 @@ /*! * js-data-fetch -* @version 3.0.0-rc.1 - Homepage +* @version 3.0.0-rc.2 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -175,7 +175,7 @@ */ function Adapter(opts) { jsData.utils.classCallCheck(this, Adapter); - jsData.Component.call(this); + jsData.Component.call(this, opts); opts || (opts = {}); jsData.utils.fillIn(opts, DEFAULTS$1); jsData.utils.fillIn(this, opts); @@ -1652,42 +1652,68 @@ } var DEFAULTS = { - // Default and user-defined settings /** + * Set a base path in order to use absolute URLs instead of relative URLs. + * + * @example + * const httpAdapter = new HttpAdapter({ + * basePath: 'https://mydomain.com' + * }) + * * @name HttpAdapter#basePath * @type {string} + * @since 3.0.0 */ basePath: '', /** + * Ensure that the request url has a trailing forward slash. + * * @name HttpAdapter#forceTrailingSlash * @type {boolean} * @default false + * @since 3.0.0 */ forceTrailingSlash: false, /** + * The HTTP function that actually makes the HTTP request. By default this is + * `axios`. + * * @name HttpAdapter#http * @type {Function} + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ http: axios, /** + * Default configuration options to be mixed into the `config` argument passed + * to {@link HttpAdapter#http}. + * * @name HttpAdapter#httpConfig * @type {Object} + * @since 3.0.0 */ httpConfig: {}, /** + * Add a suffix to the request url, e.g. ".json". + * * @name HttpAdapter#suffix * @type {string} + * @since 3.0.0 */ suffix: '', /** + * Use `window.fetch` if available. + * * @name HttpAdapter#useFetch * @type {boolean} * @default false + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-windowfetch */ useFetch: false }; @@ -1695,16 +1721,34 @@ /** * HttpAdapter class. * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * * @class HttpAdapter * @extends Adapter * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http */ function HttpAdapter(opts) { jsData.utils.classCallCheck(this, HttpAdapter); @@ -1910,8 +1954,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ count: function count(mapper, query, opts) { @@ -1934,8 +1978,8 @@ * @param {Object} mapper The mapper. * @param {Object} props Properties to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ create: function create(mapper, props, opts) { @@ -1955,8 +1999,8 @@ * @param {Object} mapper The mapper. * @param {Array} props Array of property objects to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ createMany: function createMany(mapper, props, opts) { @@ -2040,8 +2084,8 @@ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroy: function destroy(mapper, id, opts) { @@ -2061,8 +2105,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { @@ -2147,8 +2191,8 @@ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ find: function find(mapper, id, opts) { @@ -2168,8 +2212,8 @@ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ findAll: function findAll(mapper, query, opts) { @@ -2184,7 +2228,7 @@ /** - * TODO + * Make a GET request. * * @name HttpAdapter#GET * @method @@ -2223,9 +2267,9 @@ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO + * @param {Object} mapper The Mapper. + * @param {*} id The primary key, if any. + * @param {boolean} opts Configuration options. * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { @@ -2287,9 +2331,9 @@ /** * @name HttpAdapter#getPath * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO + * @param {string} method The method being executed. + * @param {Object} mapper The Mapper. + * @param {(string|number)?} id The primary key, if any. * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { @@ -2354,7 +2398,7 @@ var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { if (_this15.log) { - _this15.dbg('debug', str, data); + _this15.dbg(str, data); } return data; } else { @@ -2386,13 +2430,13 @@ /** - * TODO + * Make a POST request. * * @name HttpAdapter#POST * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -2425,13 +2469,13 @@ /** - * TODO + * Make a PUT request. * * @name HttpAdapter#PUT * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -2464,13 +2508,14 @@ /** - * TODO + * Transform the querystring object before it is serialized. This doesn't do + * anything by default. * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {*} params The querystring object. + * @param {*} opts Configuration options * @return {*} Transformed params. */ queryTransform: function queryTransform(mapper, params, opts) { @@ -2504,13 +2549,13 @@ /** - * TODO + * Serialize request data. This doesn't do anything by default. * * @name HttpAdapter#serialize * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {Object} data The request payload. + * @param {*} opts Configuration options. * @return {*} Serialized data. */ serialize: function serialize(mapper, data, opts) { @@ -2534,8 +2579,8 @@ * @param {string} field The field to sum. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ sum: function sum(mapper, field, query, opts) { @@ -2554,13 +2599,13 @@ /** - * TODO + * Perform an update. Makes a PUT request by default. * * @name HttpAdapter#update * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO + * @param {Object} mapper The Mapper for the request. + * @param {*} id The primary key of the record being updated. + * @param {*} props The update payload. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -2574,13 +2619,14 @@ /** - * TODO + * Perform an update against records that match the selection query. Makes a + * PUT request by default. * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO + * @param {Object} mapper The Mapper for the request. + * @param {Object} props The update payload. + * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -2596,20 +2642,16 @@ /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. + * Update multiple individual records in a batch. * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The mapper. + * @param {Object} mapper The Mapper for the request. * @param {Array} records Array of property objects to send as the payload. + * Each must contain the primary key of the record to be updated. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { @@ -2786,7 +2828,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.1', + full: '3.0.0-rc.2', major: 3, minor: 0, patch: 0 diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 5fc3af6..4075291 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index 9eb3973..06d5185 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-rc.1 - Homepage +* @version 3.0.0-rc.2 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg("debug",o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={full:"3.0.0-rc.1",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={full:"3.0.0-rc.2",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index a5bf6f7..f85e987 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 8df7ae6..2993f0b 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -71,42 +71,68 @@ function buildUrl(url, params) { } var DEFAULTS = { - // Default and user-defined settings /** + * Set a base path in order to use absolute URLs instead of relative URLs. + * + * @example + * const httpAdapter = new HttpAdapter({ + * basePath: 'https://mydomain.com' + * }) + * * @name HttpAdapter#basePath * @type {string} + * @since 3.0.0 */ basePath: '', /** + * Ensure that the request url has a trailing forward slash. + * * @name HttpAdapter#forceTrailingSlash * @type {boolean} * @default false + * @since 3.0.0 */ forceTrailingSlash: false, /** + * The HTTP function that actually makes the HTTP request. By default this is + * `axios`. + * * @name HttpAdapter#http * @type {Function} + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ http: axios, /** + * Default configuration options to be mixed into the `config` argument passed + * to {@link HttpAdapter#http}. + * * @name HttpAdapter#httpConfig * @type {Object} + * @since 3.0.0 */ httpConfig: {}, /** + * Add a suffix to the request url, e.g. ".json". + * * @name HttpAdapter#suffix * @type {string} + * @since 3.0.0 */ suffix: '', /** + * Use `window.fetch` if available. + * * @name HttpAdapter#useFetch * @type {boolean} * @default false + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-windowfetch */ useFetch: false }; @@ -114,16 +140,34 @@ var DEFAULTS = { /** * HttpAdapter class. * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * * @class HttpAdapter * @extends Adapter * @param {Object} [opts] Configuration options. - * @param {string} [opts.basePath=''] TODO - * @param {boolean} [opts.debug=false] TODO - * @param {boolean} [opts.forceTrailingSlash=false] TODO - * @param {Object} [opts.http=axios] TODO - * @param {Object} [opts.httpConfig={}] TODO - * @param {string} [opts.suffix=''] TODO - * @param {boolean} [opts.useFetch=false] TODO + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http */ function HttpAdapter(opts) { jsData.utils.classCallCheck(this, HttpAdapter); @@ -329,8 +373,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ count: function count(mapper, query, opts) { @@ -353,8 +397,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {Object} props Properties to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ create: function create(mapper, props, opts) { @@ -374,8 +418,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {Array} props Array of property objects to send as the payload. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ createMany: function createMany(mapper, props, opts) { @@ -459,8 +503,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroy: function destroy(mapper, id, opts) { @@ -480,8 +524,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ destroyAll: function destroyAll(mapper, query, opts) { @@ -566,8 +610,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ find: function find(mapper, id, opts) { @@ -587,8 +631,8 @@ jsDataAdapter.Adapter.extend({ * @param {Object} mapper The mapper. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ findAll: function findAll(mapper, query, opts) { @@ -603,7 +647,7 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Make a GET request. * * @name HttpAdapter#GET * @method @@ -642,9 +686,9 @@ jsDataAdapter.Adapter.extend({ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {boolean} opts TODO + * @param {Object} mapper The Mapper. + * @param {*} id The primary key, if any. + * @param {boolean} opts Configuration options. * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { @@ -706,9 +750,9 @@ jsDataAdapter.Adapter.extend({ /** * @name HttpAdapter#getPath * @method - * @param {string} method TODO - * @param {Object} mapper TODO - * @param {(string|number)?} id TODO + * @param {string} method The method being executed. + * @param {Object} mapper The Mapper. + * @param {(string|number)?} id The primary key, if any. * @param {Object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { @@ -773,7 +817,7 @@ jsDataAdapter.Adapter.extend({ var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; if (data.status >= 200 && data.status < 300) { if (_this15.log) { - _this15.dbg('debug', str, data); + _this15.dbg(str, data); } return data; } else { @@ -805,13 +849,13 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Make a POST request. * * @name HttpAdapter#POST * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -844,13 +888,13 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Make a PUT request. * * @name HttpAdapter#PUT * @method - * @param {*} url TODO - * @param {Object} data TODO - * @param {Object} config TODO + * @param {*} url The url for the request. + * @param {Object} data Payload for the request. + * @param {Object} config Request configuration options. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -883,13 +927,14 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Transform the querystring object before it is serialized. This doesn't do + * anything by default. * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper TODO - * @param {*} params TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {*} params The querystring object. + * @param {*} opts Configuration options * @return {*} Transformed params. */ queryTransform: function queryTransform(mapper, params, opts) { @@ -923,13 +968,13 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Serialize request data. This doesn't do anything by default. * * @name HttpAdapter#serialize * @method - * @param {Object} mapper TODO - * @param {Object} data TODO - * @param {*} opts TODO + * @param {Object} mapper The Mapper that triggered the request. + * @param {Object} data The request payload. + * @param {*} opts Configuration options. * @return {*} Serialized data. */ serialize: function serialize(mapper, data, opts) { @@ -953,8 +998,8 @@ jsDataAdapter.Adapter.extend({ * @param {string} field The field to sum. * @param {Object} query Selection query. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ sum: function sum(mapper, field, query, opts) { @@ -973,13 +1018,13 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Perform an update. Makes a PUT request by default. * * @name HttpAdapter#update * @method - * @param {Object} mapper TODO - * @param {*} id TODO - * @param {*} props TODO + * @param {Object} mapper The Mapper for the request. + * @param {*} id The primary key of the record being updated. + * @param {*} props The update payload. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -993,13 +1038,14 @@ jsDataAdapter.Adapter.extend({ /** - * TODO + * Perform an update against records that match the selection query. Makes a + * PUT request by default. * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper TODO - * @param {Object} props TODO - * @param {Object} query TODO + * @param {Object} mapper The Mapper for the request. + * @param {Object} props The update payload. + * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. * @param {Object} [opts] Configuration options. * @return {Promise} */ @@ -1015,20 +1061,16 @@ jsDataAdapter.Adapter.extend({ /** - * Update multiple records in batch. - * - * {@link HttpAdapter#beforeUpdateMany} will be called before calling - * {@link HttpAdapter#PUT}. - * {@link HttpAdapter#afterUpdateMany} will be called after calling - * {@link HttpAdapter#PUT}. + * Update multiple individual records in a batch. * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The mapper. + * @param {Object} mapper The Mapper for the request. * @param {Array} records Array of property objects to send as the payload. + * Each must contain the primary key of the record to be updated. * @param {Object} [opts] Configuration options. - * @param {string} [opts.params] TODO - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} */ updateMany: function updateMany(mapper, records, opts) { @@ -1205,7 +1247,7 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.1', + full: '3.0.0-rc.2', major: 3, minor: 0, patch: 0 diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index d1a33ae..ea05885 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n // Default and user-defined settings\n /**\n * @name HttpAdapter#basePath\n * @type {string}\n */\n basePath: '',\n\n /**\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n */\n forceTrailingSlash: false,\n\n /**\n * @name HttpAdapter#http\n * @type {Function}\n */\n http: axios,\n\n /**\n * @name HttpAdapter#httpConfig\n * @type {Object}\n */\n httpConfig: {},\n\n /**\n * @name HttpAdapter#suffix\n * @type {string}\n */\n suffix: '',\n\n /**\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] TODO\n * @param {boolean} [opts.debug=false] TODO\n * @param {boolean} [opts.forceTrailingSlash=false] TODO\n * @param {Object} [opts.http=axios] TODO\n * @param {Object} [opts.httpConfig={}] TODO\n * @param {string} [opts.suffix=''] TODO\n * @param {boolean} [opts.useFetch=false] TODO\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {boolean} opts TODO\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method TODO\n * @param {Object} mapper TODO\n * @param {(string|number)?} id TODO\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg('debug', str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url TODO\n * @param {Object} data TODO\n * @param {Object} config TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper TODO\n * @param {*} params TODO\n * @param {*} opts TODO\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper TODO\n * @param {Object} data TODO\n * @param {*} opts TODO\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper TODO\n * @param {*} id TODO\n * @param {*} props TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * TODO\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper TODO\n * @param {Object} props TODO\n * @param {Object} query TODO\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple records in batch.\n *\n * {@link HttpAdapter#beforeUpdateMany} will be called before calling\n * {@link HttpAdapter#PUT}.\n * {@link HttpAdapter#afterUpdateMany} will be called after calling\n * {@link HttpAdapter#PUT}.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} records Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] TODO\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] TODO\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file From 1aff558eedf4c0fabb75df3c8ebe43fe9a97eeb0 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 18 Aug 2016 20:50:50 -0700 Subject: [PATCH 09/10] 3.0.0-rc.3 --- dist/js-data-http.js | 305 ++++++++++++++--------------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 6 +- dist/js-data-http.min.map | 2 +- fetch/dist/js-data-fetch.js | 305 ++++++++++++++--------------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.map | 2 +- node/dist/js-data-http-node.js | 303 ++++++++++++++-------------- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 465 insertions(+), 468 deletions(-) diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 0e141d2..0407a83 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-rc.2 - Homepage +* @version 3.0.0-rc.3 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -3041,7 +3041,7 @@ } val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { + if (toString.call(v) === '[object Date]') { v = v.toISOString(); } else if (jsData.utils.isObject(v)) { v = jsData.utils.toJson(v); @@ -3064,7 +3064,7 @@ * @example * const httpAdapter = new HttpAdapter({ * basePath: 'https://mydomain.com' - * }) + * }); * * @name HttpAdapter#basePath * @type {string} @@ -3087,7 +3087,7 @@ * `axios`. * * @name HttpAdapter#http - * @type {Function} + * @type {function} * @since 3.0.0 * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ @@ -3098,7 +3098,7 @@ * to {@link HttpAdapter#http}. * * @name HttpAdapter#httpConfig - * @type {Object} + * @type {object} * @since 3.0.0 */ httpConfig: {}, @@ -3146,12 +3146,12 @@ * * @class HttpAdapter * @extends Adapter - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. * @see http://www.js-data.io/docs/js-data-http @@ -3177,9 +3177,9 @@ * @name HttpAdapter#afterDEL * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterDEL: noop2, @@ -3187,18 +3187,18 @@ * @name HttpAdapter#afterGET * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterGET: noop2, /** * @name HttpAdapter#afterHTTP * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterHTTP: noop2, @@ -3206,10 +3206,10 @@ * @name HttpAdapter#afterPOST * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPOST: noop2, @@ -3217,56 +3217,56 @@ * @name HttpAdapter#afterPUT * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPUT: noop2, /** * @name HttpAdapter#beforeDEL * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeDEL: noop, /** * @name HttpAdapter#beforeGET * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeGET: noop, /** * @name HttpAdapter#beforeHTTP * @method - * @param {Object} config - * @param {Object} opts + * @param {object} config + * @param {object} opts */ beforeHTTP: noop, /** * @name HttpAdapter#beforePOST * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePOST: noop, /** * @name HttpAdapter#beforePUT * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePUT: noop, @@ -3357,9 +3357,9 @@ * * @name HttpAdapter#count * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3381,9 +3381,9 @@ * * @name HttpAdapter#create * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} props Properties to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3402,9 +3402,9 @@ * * @name HttpAdapter#createMany * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {array} props Array of property objects to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3424,9 +3424,9 @@ * @name HttpAdapter#DEL * @method * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to + * @param {object} [config] Http configuration that will be passed to * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ DEL: function DEL(url, config, opts) { @@ -3462,10 +3462,10 @@ * * @name HttpAdapter#deserialize * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. + * @param {object} mapper The mapper used for the operation. + * @param {object} response Response object from {@link HttpAdapter#HTTP}. + * @param {object} opts Configuration options. + * @return {(object|array)} Deserialized data. */ deserialize: function deserialize(mapper, response, opts) { opts || (opts = {}); @@ -3487,9 +3487,9 @@ * * @name HttpAdapter#destroy * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3508,9 +3508,9 @@ * * @name HttpAdapter#destroyAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3547,16 +3547,15 @@ * * @name HttpAdapter#fetch * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. + * @param {object} config Request configuration. + * @param {object} config.data Payload for the request. * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. + * @param {object} config.headers Headers for the request. + * @param {object} config.params Querystring for the request. * @param {string} config.url Url for the request. - * @param {Object} [opts] Configuration options. */ fetch: function (_fetch) { - function fetch(_x, _x2) { + function fetch(_x) { return _fetch.apply(this, arguments); } @@ -3565,18 +3564,18 @@ }; return fetch; - }(function (config, opts) { + }(function (config) { var requestConfig = { method: config.method, // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) + headers: new Headers(config.headers || {}) }; if (config.data) { requestConfig.body = jsData.utils.toJson(config.data); } - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { response.config = { method: config.method, url: config.url @@ -3594,9 +3593,9 @@ * * @name HttpAdapter#find * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3615,9 +3614,9 @@ * * @name HttpAdapter#findAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3639,8 +3638,8 @@ * @name HttpAdapter#GET * @method * @param {string} url The url for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ GET: function GET(url, config, opts) { @@ -3673,7 +3672,7 @@ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {*} id The primary key, if any. * @param {boolean} opts Configuration options. * @return {string} Full path. @@ -3738,9 +3737,9 @@ * @name HttpAdapter#getPath * @method * @param {string} method The method being executed. - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {(string|number)?} id The primary key, if any. - * @param {Object} opts Configuration options. + * @param {object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { opts || (opts = {}); @@ -3774,8 +3773,8 @@ * * @name HttpAdapter#HTTP * @method - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ HTTP: function HTTP(config, opts) { @@ -3841,9 +3840,9 @@ * @name HttpAdapter#POST * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ POST: function POST(url, data, config, opts) { @@ -3880,9 +3879,9 @@ * @name HttpAdapter#PUT * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ PUT: function PUT(url, data, config, opts) { @@ -3919,7 +3918,7 @@ * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper The Mapper that triggered the request. + * @param {object} mapper The Mapper that triggered the request. * @param {*} params The querystring object. * @param {*} opts Configuration options * @return {*} Transformed params. @@ -3945,7 +3944,7 @@ * @name HttpAdapter#responseError * @method * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. * @return {Promise} */ @@ -3959,8 +3958,8 @@ * * @name HttpAdapter#serialize * @method - * @param {Object} mapper The Mapper that triggered the request. - * @param {Object} data The request payload. + * @param {object} mapper The Mapper that triggered the request. + * @param {object} data The request payload. * @param {*} opts Configuration options. * @return {*} Serialized data. */ @@ -3981,10 +3980,10 @@ * * @name HttpAdapter#sum * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {string} field The field to sum. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -3992,7 +3991,7 @@ sum: function sum(mapper, field, query, opts) { query || (query = {}); opts || (opts = {}); - if (!jsData.utils.utils.isString(field)) { + if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); } opts.params = this.getParams(opts); @@ -4009,10 +4008,10 @@ * * @name HttpAdapter#update * @method - * @param {Object} mapper The Mapper for the request. + * @param {object} mapper The Mapper for the request. * @param {*} id The primary key of the record being updated. * @param {*} props The update payload. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ update: function update(mapper, id, props, opts) { @@ -4030,10 +4029,10 @@ * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper The Mapper for the request. - * @param {Object} props The update payload. - * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The Mapper for the request. + * @param {object} props The update payload. + * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. + * @param {object} [opts] Configuration options. * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { @@ -4052,10 +4051,10 @@ * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The Mapper for the request. - * @param {Array} records Array of property objects to send as the payload. + * @param {object} mapper The Mapper for the request. + * @param {array} records Array of property objects to send as the payload. * Each must contain the primary key of the record to be updated. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -4074,42 +4073,45 @@ * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addAction = JSDataHttp.addAction; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * // GET /reports/schools/:school_id/teachers * addAction('getTeacherReports', { - * basePath: 'reports/schools', + * endpoint: 'reports/schools', * pathname: 'teachers', * method: 'GET' - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to + * @param {object} [opts] Action configuration + * @param {string} [opts.adapter="http"] The name of the adapter to use. + * @param {string} [opts.pathname] Set the action's pathname. + * @param {function} [opts.request] Specify a request handler to be executed + * before the request is made. + * @param {function} [opts.response] Specify a response handler to be executed + * after the response is received. + * @param {function} [opts.responseError] Specify an error handler to be + * executed on error. + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addAction(name, opts) { @@ -4132,37 +4134,34 @@ mapper[name] = function (id, _opts) { var _this18 = this; + _opts = _opts || {}; if (jsData.utils.isObject(id)) { _opts = id; } - _opts = _opts || {}; - var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); + jsData.utils.fillIn(_opts, opts); + var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); var config = {}; - jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } + config.mapper = this.name; + jsData.utils.deepMixIn(config, _opts); + config.method = config.method || 'GET'; if (typeof _opts.getEndpoint === 'function') { config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } args.push(opts.pathname || name); config.url = makePath.apply(null, args); } - config.method = config.method || 'GET'; - config.mapper = this.name; - jsData.utils.deepMixIn(config, _opts); - return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return jsData.utils.resolve(config).then(_opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { data.config.mapper = _this18.name; } return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }).then(_opts.response, _opts.responseError); }; return mapper; }; @@ -4174,19 +4173,19 @@ * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addActions = JSDataHttp.addActions; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * addActions({ * // GET /reports/schools/:school_id/teachers @@ -4195,18 +4194,18 @@ * pathname: 'teachers', * method: 'GET' * } - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addActions * @method - * @param {Object.} opts Object where the key is an action name + * @param {object.} opts Object where the key is an action name * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addActions(opts) { @@ -4223,7 +4222,7 @@ * Details of the current version of the `js-data-http` module. * * @name module:js-data-http.version - * @type {Object} + * @type {object} * @property {string} version.full The full semver value. * @property {number} version.major The major version number. * @property {number} version.minor The minor version number. @@ -4234,7 +4233,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.2', + full: '3.0.0-rc.3', major: 3, minor: 0, patch: 0 diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index dad0550..30360f8 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 0f2fd27..2ccdbc9 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 3.0.0-rc.2 - Homepage +* @version 3.0.0-rc.3 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function s(t,e){return e||(e=""),t.filter(a).join(e)}function u(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var a=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),s.url=u.apply(null,f)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),s=t.exports=r();s.Axios=a,s.create=function(t){return r(t)},s.all=function(t){return Promise.all(t)},s.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return"string"==typeof t}function u(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),s=n(16),u=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||s(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(u("Network Error",t)),p=null},p.ontimeout=function(){l(u("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||s(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",s=0,u=i;o.charAt(0|s)||(u="=",s%1);a+=u.charAt(63&e>>8-s%1*8)){if(r=o.charCodeAt(s+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),a===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e, -a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.2",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function u(t,e){return e||(e=""),t.filter(a).join(e)}function s(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;i=i||{},e.utils.isObject(r)&&(i=r),e.utils.fillIn(i,n);var a=this.getAdapter(i.adapter||this.defaultAdapter||"http"),u={};if(u.mapper=this.name,e.utils.deepMixIn(u,i),u.method=u.method||"GET","function"==typeof i.getEndpoint)u.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,r,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),u.url=s.apply(null,f)}return e.utils.resolve(u).then(i.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response,i.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),u=t.exports=r();u.Axios=a,u.create=function(t){return r(t)},u.all=function(t){return Promise.all(t)},u.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function s(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),u=n(16),s=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(s("Network Error",t)),p=null},p.ontimeout=function(){l(s("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||u(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&e>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){ +return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.3",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.map b/dist/js-data-http.min.map index a732621..f0f3816 100644 --- a/dist/js-data-http.min.map +++ b/dist/js-data-http.min.map @@ -1 +1 @@ -{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","interopDefault","ex","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","commonjsGlobal","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","extend","create","all","promises","Promise","spread","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","merge","assignValue","a","b","thisArg","Object","defaults","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","baseURL","chain","undefined","promise","interceptor","unshift","fulfilled","rejected","shift","setContentTypeIfUnset","headers","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","common","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","normalizedName","toUpperCase","handlers","use","eject","h","transformData","XMLHttpRequest","process","error","fns","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","enhanceError","message","code","serializedParams","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","relativeURL","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","_x2","requestConfig","Headers","body","Request","json","relationList","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","interopDefault","ex","createCommonjsModule","fn","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","deepMixIn","method","getEndpoint","basePath","isSorN","pathname","apply","resolve","then","HTTP","addActions","commonjsGlobal","window","self","axios","root","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","extend","create","all","promises","Promise","spread","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","document","createElement","obj","i","l","hasOwnProperty","merge","assignValue","a","b","thisArg","Object","defaults","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","baseURL","chain","undefined","promise","interceptor","unshift","fulfilled","rejected","shift","setContentTypeIfUnset","headers","normalizeHeaderName","PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","transformRequest","JSON","stringify","transformResponse","parse","e","common","Accept","patch","post","put","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","normalizedName","toUpperCase","handlers","use","eject","h","transformData","XMLHttpRequest","process","error","fns","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","progress","upload","addEventListener","send","enhanceError","message","code","serializedParams","parsed","split","line","substr","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","navigator","userAgent","location","requestURL","E","input","block","charCode","String","output","idx","map","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","relativeURL","callback","arr","axios$1","Symbol","iterator","constructor","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","requestConfig","Headers","body","json","relationList","endpoint","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this16","_this17","version","full","major","minor"],"mappings":"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","file":"dist/js-data-http.min.js"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index 2979bf4..232e18b 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,6 +1,6 @@ /*! * js-data-fetch -* @version 3.0.0-rc.2 - Homepage +* @version 3.0.0-rc.3 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -1635,7 +1635,7 @@ } val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { + if (toString.call(v) === '[object Date]') { v = v.toISOString(); } else if (jsData.utils.isObject(v)) { v = jsData.utils.toJson(v); @@ -1658,7 +1658,7 @@ * @example * const httpAdapter = new HttpAdapter({ * basePath: 'https://mydomain.com' - * }) + * }); * * @name HttpAdapter#basePath * @type {string} @@ -1681,7 +1681,7 @@ * `axios`. * * @name HttpAdapter#http - * @type {Function} + * @type {function} * @since 3.0.0 * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ @@ -1692,7 +1692,7 @@ * to {@link HttpAdapter#http}. * * @name HttpAdapter#httpConfig - * @type {Object} + * @type {object} * @since 3.0.0 */ httpConfig: {}, @@ -1740,12 +1740,12 @@ * * @class HttpAdapter * @extends Adapter - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. * @see http://www.js-data.io/docs/js-data-http @@ -1771,9 +1771,9 @@ * @name HttpAdapter#afterDEL * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterDEL: noop2, @@ -1781,18 +1781,18 @@ * @name HttpAdapter#afterGET * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterGET: noop2, /** * @name HttpAdapter#afterHTTP * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterHTTP: noop2, @@ -1800,10 +1800,10 @@ * @name HttpAdapter#afterPOST * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPOST: noop2, @@ -1811,56 +1811,56 @@ * @name HttpAdapter#afterPUT * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPUT: noop2, /** * @name HttpAdapter#beforeDEL * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeDEL: noop, /** * @name HttpAdapter#beforeGET * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeGET: noop, /** * @name HttpAdapter#beforeHTTP * @method - * @param {Object} config - * @param {Object} opts + * @param {object} config + * @param {object} opts */ beforeHTTP: noop, /** * @name HttpAdapter#beforePOST * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePOST: noop, /** * @name HttpAdapter#beforePUT * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePUT: noop, @@ -1951,9 +1951,9 @@ * * @name HttpAdapter#count * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -1975,9 +1975,9 @@ * * @name HttpAdapter#create * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} props Properties to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -1996,9 +1996,9 @@ * * @name HttpAdapter#createMany * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {array} props Array of property objects to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2018,9 +2018,9 @@ * @name HttpAdapter#DEL * @method * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to + * @param {object} [config] Http configuration that will be passed to * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ DEL: function DEL(url, config, opts) { @@ -2056,10 +2056,10 @@ * * @name HttpAdapter#deserialize * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. + * @param {object} mapper The mapper used for the operation. + * @param {object} response Response object from {@link HttpAdapter#HTTP}. + * @param {object} opts Configuration options. + * @return {(object|array)} Deserialized data. */ deserialize: function deserialize(mapper, response, opts) { opts || (opts = {}); @@ -2081,9 +2081,9 @@ * * @name HttpAdapter#destroy * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2102,9 +2102,9 @@ * * @name HttpAdapter#destroyAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2141,16 +2141,15 @@ * * @name HttpAdapter#fetch * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. + * @param {object} config Request configuration. + * @param {object} config.data Payload for the request. * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. + * @param {object} config.headers Headers for the request. + * @param {object} config.params Querystring for the request. * @param {string} config.url Url for the request. - * @param {Object} [opts] Configuration options. */ fetch: function (_fetch) { - function fetch(_x, _x2) { + function fetch(_x) { return _fetch.apply(this, arguments); } @@ -2159,18 +2158,18 @@ }; return fetch; - }(function (config, opts) { + }(function (config) { var requestConfig = { method: config.method, // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) + headers: new Headers(config.headers || {}) }; if (config.data) { requestConfig.body = jsData.utils.toJson(config.data); } - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { response.config = { method: config.method, url: config.url @@ -2188,9 +2187,9 @@ * * @name HttpAdapter#find * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2209,9 +2208,9 @@ * * @name HttpAdapter#findAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2233,8 +2232,8 @@ * @name HttpAdapter#GET * @method * @param {string} url The url for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ GET: function GET(url, config, opts) { @@ -2267,7 +2266,7 @@ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {*} id The primary key, if any. * @param {boolean} opts Configuration options. * @return {string} Full path. @@ -2332,9 +2331,9 @@ * @name HttpAdapter#getPath * @method * @param {string} method The method being executed. - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {(string|number)?} id The primary key, if any. - * @param {Object} opts Configuration options. + * @param {object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { opts || (opts = {}); @@ -2368,8 +2367,8 @@ * * @name HttpAdapter#HTTP * @method - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ HTTP: function HTTP(config, opts) { @@ -2435,9 +2434,9 @@ * @name HttpAdapter#POST * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ POST: function POST(url, data, config, opts) { @@ -2474,9 +2473,9 @@ * @name HttpAdapter#PUT * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ PUT: function PUT(url, data, config, opts) { @@ -2513,7 +2512,7 @@ * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper The Mapper that triggered the request. + * @param {object} mapper The Mapper that triggered the request. * @param {*} params The querystring object. * @param {*} opts Configuration options * @return {*} Transformed params. @@ -2539,7 +2538,7 @@ * @name HttpAdapter#responseError * @method * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. * @return {Promise} */ @@ -2553,8 +2552,8 @@ * * @name HttpAdapter#serialize * @method - * @param {Object} mapper The Mapper that triggered the request. - * @param {Object} data The request payload. + * @param {object} mapper The Mapper that triggered the request. + * @param {object} data The request payload. * @param {*} opts Configuration options. * @return {*} Serialized data. */ @@ -2575,10 +2574,10 @@ * * @name HttpAdapter#sum * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {string} field The field to sum. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2586,7 +2585,7 @@ sum: function sum(mapper, field, query, opts) { query || (query = {}); opts || (opts = {}); - if (!jsData.utils.utils.isString(field)) { + if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); } opts.params = this.getParams(opts); @@ -2603,10 +2602,10 @@ * * @name HttpAdapter#update * @method - * @param {Object} mapper The Mapper for the request. + * @param {object} mapper The Mapper for the request. * @param {*} id The primary key of the record being updated. * @param {*} props The update payload. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ update: function update(mapper, id, props, opts) { @@ -2624,10 +2623,10 @@ * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper The Mapper for the request. - * @param {Object} props The update payload. - * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The Mapper for the request. + * @param {object} props The update payload. + * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. + * @param {object} [opts] Configuration options. * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { @@ -2646,10 +2645,10 @@ * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The Mapper for the request. - * @param {Array} records Array of property objects to send as the payload. + * @param {object} mapper The Mapper for the request. + * @param {array} records Array of property objects to send as the payload. * Each must contain the primary key of the record to be updated. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -2668,42 +2667,45 @@ * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addAction = JSDataHttp.addAction; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * // GET /reports/schools/:school_id/teachers * addAction('getTeacherReports', { - * basePath: 'reports/schools', + * endpoint: 'reports/schools', * pathname: 'teachers', * method: 'GET' - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to + * @param {object} [opts] Action configuration + * @param {string} [opts.adapter="http"] The name of the adapter to use. + * @param {string} [opts.pathname] Set the action's pathname. + * @param {function} [opts.request] Specify a request handler to be executed + * before the request is made. + * @param {function} [opts.response] Specify a response handler to be executed + * after the response is received. + * @param {function} [opts.responseError] Specify an error handler to be + * executed on error. + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addAction(name, opts) { @@ -2726,37 +2728,34 @@ mapper[name] = function (id, _opts) { var _this18 = this; + _opts = _opts || {}; if (jsData.utils.isObject(id)) { _opts = id; } - _opts = _opts || {}; - var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); + jsData.utils.fillIn(_opts, opts); + var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); var config = {}; - jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } + config.mapper = this.name; + jsData.utils.deepMixIn(config, _opts); + config.method = config.method || 'GET'; if (typeof _opts.getEndpoint === 'function') { config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } args.push(opts.pathname || name); config.url = makePath.apply(null, args); } - config.method = config.method || 'GET'; - config.mapper = this.name; - jsData.utils.deepMixIn(config, _opts); - return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return jsData.utils.resolve(config).then(_opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { data.config.mapper = _this18.name; } return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }).then(_opts.response, _opts.responseError); }; return mapper; }; @@ -2768,19 +2767,19 @@ * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addActions = JSDataHttp.addActions; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * addActions({ * // GET /reports/schools/:school_id/teachers @@ -2789,18 +2788,18 @@ * pathname: 'teachers', * method: 'GET' * } - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addActions * @method - * @param {Object.} opts Object where the key is an action name + * @param {object.} opts Object where the key is an action name * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addActions(opts) { @@ -2817,7 +2816,7 @@ * Details of the current version of the `js-data-http` module. * * @name module:js-data-http.version - * @type {Object} + * @type {object} * @property {string} version.full The full semver value. * @property {number} version.major The major version number. * @property {number} version.minor The minor version number. @@ -2828,7 +2827,7 @@ * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.2', + full: '3.0.0-rc.3', major: 3, minor: 0, patch: 0 diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 4075291..0464131 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index 06d5185..668d5fe 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-rc.2 - Homepage +* @version 3.0.0-rc.3 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;e.utils.isObject(r)&&(i=r),i=i||{};var u=this.getAdapter(n.adapter||this.defaultAdapter||"http"),s={};if(e.utils.fillIn(s,n),!i.hasOwnProperty("endpoint")&&s.endpoint&&(i.endpoint=s.endpoint),"function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,e.utils.isSorN(r)?r:null,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return s.method=s.method||"GET",s.mapper=this.name,e.utils.deepMixIn(s,i),e.utils.resolve(s).then(i.request||n.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response||n.response,i.responseError||n.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var w={full:"3.0.0-rc.2",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=w,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;i=i||{},e.utils.isObject(r)&&(i=r),e.utils.fillIn(i,n);var u=this.getAdapter(i.adapter||this.defaultAdapter||"http"),s={};if(s.mapper=this.name,e.utils.deepMixIn(s,i),s.method=s.method||"GET","function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,r,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return e.utils.resolve(s).then(i.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response,i.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.3",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.map b/fetch/dist/js-data-fetch.min.map index f85e987..ad3e108 100644 --- a/fetch/dist/js-data-fetch.min.map +++ b/fetch/dist/js-data-fetch.min.map @@ -1 +1 @@ -{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","hasOwnProperty","endpoint","getEndpoint","basePath","isSorN","pathname","apply","method","deepMixIn","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","isUndefined","relationList","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","deepMixIn","method","getEndpoint","basePath","isSorN","pathname","apply","resolve","then","HTTP","addActions","Symbol","iterator","obj","constructor","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","relationFields","toStrip","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","keys","makeBelongsToForeignKey","findAll","where","idAttribute","in","relatedItems","relatedItem","foreignKey","setLocalField","_ret","find","_this7","_find","_results6","_record","_meta","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_results7","_records","getOpt","opt","plainCopy","_this9","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this10","relatedMapper","makeHasManyLocalKeys","_ret2","x","itemKeys","_this11","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this12","_sum","_results8","update","_this13","_update","_results9","updated","updateAll","_this14","_updateAll","_results10","updateMany","_this15","_updateMany","_results11","axios","hasFetch","window","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","prototype","_config","isFunction","hasOwnProperty","error","console","_console","_fetch","_x","requestConfig","headers","Headers","body","json","isUndefined","relationList","endpoint","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this16","_this17","version","full","major","minor","patch"],"mappings":"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","file":"fetch/dist/js-data-fetch.min.js"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index 2993f0b..c888f46 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -54,7 +54,7 @@ function buildUrl(url, params) { } val.forEach(function (v) { - if (window.toString.call(v) === '[object Date]') { + if (toString.call(v) === '[object Date]') { v = v.toISOString(); } else if (jsData.utils.isObject(v)) { v = jsData.utils.toJson(v); @@ -77,7 +77,7 @@ var DEFAULTS = { * @example * const httpAdapter = new HttpAdapter({ * basePath: 'https://mydomain.com' - * }) + * }); * * @name HttpAdapter#basePath * @type {string} @@ -100,7 +100,7 @@ var DEFAULTS = { * `axios`. * * @name HttpAdapter#http - * @type {Function} + * @type {function} * @since 3.0.0 * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library */ @@ -111,7 +111,7 @@ var DEFAULTS = { * to {@link HttpAdapter#http}. * * @name HttpAdapter#httpConfig - * @type {Object} + * @type {object} * @since 3.0.0 */ httpConfig: {}, @@ -159,12 +159,12 @@ var DEFAULTS = { * * @class HttpAdapter * @extends Adapter - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. * @see http://www.js-data.io/docs/js-data-http @@ -190,9 +190,9 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#afterDEL * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterDEL: jsDataAdapter.noop2, @@ -200,18 +200,18 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#afterGET * @method * @param {string} url - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterGET: jsDataAdapter.noop2, /** * @name HttpAdapter#afterHTTP * @method - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} config + * @param {object} opts + * @param {object} response */ afterHTTP: jsDataAdapter.noop2, @@ -219,10 +219,10 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#afterPOST * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPOST: jsDataAdapter.noop2, @@ -230,56 +230,56 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#afterPUT * @method * @param {string} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts - * @param {Object} response + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response */ afterPUT: jsDataAdapter.noop2, /** * @name HttpAdapter#beforeDEL * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeDEL: jsDataAdapter.noop, /** * @name HttpAdapter#beforeGET * @method - * @param {Object} url - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} config + * @param {object} opts */ beforeGET: jsDataAdapter.noop, /** * @name HttpAdapter#beforeHTTP * @method - * @param {Object} config - * @param {Object} opts + * @param {object} config + * @param {object} opts */ beforeHTTP: jsDataAdapter.noop, /** * @name HttpAdapter#beforePOST * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePOST: jsDataAdapter.noop, /** * @name HttpAdapter#beforePUT * @method - * @param {Object} url - * @param {Object} data - * @param {Object} config - * @param {Object} opts + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts */ beforePUT: jsDataAdapter.noop, @@ -370,9 +370,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#count * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -394,9 +394,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#create * @method - * @param {Object} mapper The mapper. - * @param {Object} props Properties to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} props Properties to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -415,9 +415,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#createMany * @method - * @param {Object} mapper The mapper. - * @param {Array} props Array of property objects to send as the payload. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {array} props Array of property objects to send as the payload. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -437,9 +437,9 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#DEL * @method * @param {string} url Url for the request. - * @param {Object} [config] Http configuration that will be passed to + * @param {object} [config] Http configuration that will be passed to * {@link HttpAdapter#HTTP}. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ DEL: function DEL(url, config, opts) { @@ -475,10 +475,10 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#deserialize * @method - * @param {Object} mapper The mapper used for the operation. - * @param {Object} response Response object from {@link HttpAdapter#HTTP}. - * @param {Object} opts Configuration options. - * @return {(Object|Array)} Deserialized data. + * @param {object} mapper The mapper used for the operation. + * @param {object} response Response object from {@link HttpAdapter#HTTP}. + * @param {object} opts Configuration options. + * @return {(object|array)} Deserialized data. */ deserialize: function deserialize(mapper, response, opts) { opts || (opts = {}); @@ -500,9 +500,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#destroy * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -521,9 +521,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#destroyAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -560,16 +560,15 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#fetch * @method - * @param {Object} config Request configuration. - * @param {Object} config.data Payload for the request. + * @param {object} config Request configuration. + * @param {object} config.data Payload for the request. * @param {string} config.method Http method for the request. - * @param {Object} config.headers Headers for the request. - * @param {Object} config.params Querystring for the request. + * @param {object} config.headers Headers for the request. + * @param {object} config.params Querystring for the request. * @param {string} config.url Url for the request. - * @param {Object} [opts] Configuration options. */ fetch: function (_fetch) { - function fetch(_x, _x2) { + function fetch(_x) { return _fetch.apply(this, arguments); } @@ -578,18 +577,18 @@ jsDataAdapter.Adapter.extend({ }; return fetch; - }(function (config, opts) { + }(function (config) { var requestConfig = { method: config.method, // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers) + headers: new Headers(config.headers || {}) }; if (config.data) { requestConfig.body = jsData.utils.toJson(config.data); } - return fetch(new Request(buildUrl(config.url, config.params), requestConfig)).then(function (response) { + return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { response.config = { method: config.method, url: config.url @@ -607,9 +606,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#find * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -628,9 +627,9 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#findAll * @method - * @param {Object} mapper The mapper. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -652,8 +651,8 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#GET * @method * @param {string} url The url for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ GET: function GET(url, config, opts) { @@ -686,7 +685,7 @@ jsDataAdapter.Adapter.extend({ /** * @name HttpAdapter#getEndpoint * @method - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {*} id The primary key, if any. * @param {boolean} opts Configuration options. * @return {string} Full path. @@ -751,9 +750,9 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#getPath * @method * @param {string} method The method being executed. - * @param {Object} mapper The Mapper. + * @param {object} mapper The Mapper. * @param {(string|number)?} id The primary key, if any. - * @param {Object} opts Configuration options. + * @param {object} opts Configuration options. */ getPath: function getPath(method, mapper, id, opts) { opts || (opts = {}); @@ -787,8 +786,8 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#HTTP * @method - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ HTTP: function HTTP(config, opts) { @@ -854,9 +853,9 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#POST * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ POST: function POST(url, data, config, opts) { @@ -893,9 +892,9 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#PUT * @method * @param {*} url The url for the request. - * @param {Object} data Payload for the request. - * @param {Object} config Request configuration options. - * @param {Object} [opts] Configuration options. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ PUT: function PUT(url, data, config, opts) { @@ -932,7 +931,7 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#queryTransform * @method - * @param {Object} mapper The Mapper that triggered the request. + * @param {object} mapper The Mapper that triggered the request. * @param {*} params The querystring object. * @param {*} opts Configuration options * @return {*} Transformed params. @@ -958,7 +957,7 @@ jsDataAdapter.Adapter.extend({ * @name HttpAdapter#responseError * @method * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. * @return {Promise} */ @@ -972,8 +971,8 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#serialize * @method - * @param {Object} mapper The Mapper that triggered the request. - * @param {Object} data The request payload. + * @param {object} mapper The Mapper that triggered the request. + * @param {object} data The request payload. * @param {*} opts Configuration options. * @return {*} Serialized data. */ @@ -994,10 +993,10 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#sum * @method - * @param {Object} mapper The mapper. + * @param {object} mapper The mapper. * @param {string} field The field to sum. - * @param {Object} query Selection query. - * @param {Object} [opts] Configuration options. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -1005,7 +1004,7 @@ jsDataAdapter.Adapter.extend({ sum: function sum(mapper, field, query, opts) { query || (query = {}); opts || (opts = {}); - if (!jsData.utils.utils.isString(field)) { + if (!jsData.utils.isString(field)) { throw new Error('field must be a string!'); } opts.params = this.getParams(opts); @@ -1022,10 +1021,10 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#update * @method - * @param {Object} mapper The Mapper for the request. + * @param {object} mapper The Mapper for the request. * @param {*} id The primary key of the record being updated. * @param {*} props The update payload. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @return {Promise} */ update: function update(mapper, id, props, opts) { @@ -1043,10 +1042,10 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#updateAll * @method - * @param {Object} mapper The Mapper for the request. - * @param {Object} props The update payload. - * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. - * @param {Object} [opts] Configuration options. + * @param {object} mapper The Mapper for the request. + * @param {object} props The update payload. + * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. + * @param {object} [opts] Configuration options. * @return {Promise} */ updateAll: function updateAll(mapper, props, query, opts) { @@ -1065,10 +1064,10 @@ jsDataAdapter.Adapter.extend({ * * @name HttpAdapter#updateMany * @method - * @param {Object} mapper The Mapper for the request. - * @param {Array} records Array of property objects to send as the payload. + * @param {object} mapper The Mapper for the request. + * @param {array} records Array of property objects to send as the payload. * Each must contain the primary key of the record to be updated. - * @param {Object} [opts] Configuration options. + * @param {object} [opts] Configuration options. * @param {string} [opts.params] Querystring parameters. * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. * @return {Promise} @@ -1087,42 +1086,45 @@ jsDataAdapter.Adapter.extend({ * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addAction = JSDataHttp.addAction + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addAction = JSDataHttp.addAction; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * // GET /reports/schools/:school_id/teachers * addAction('getTeacherReports', { - * basePath: 'reports/schools', + * endpoint: 'reports/schools', * pathname: 'teachers', * method: 'GET' - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addAction * @method * @param {string} name Name of the new action. - * @param {Object} [opts] Action configuration - * @param {string} [opts.adapter] - * @param {string} [opts.pathname] - * @param {Function} [opts.request] - * @param {Function} [opts.response] - * @param {Function} [opts.responseError] - * @return {Function} Decoration function, which should be passed the mapper to + * @param {object} [opts] Action configuration + * @param {string} [opts.adapter="http"] The name of the adapter to use. + * @param {string} [opts.pathname] Set the action's pathname. + * @param {function} [opts.request] Specify a request handler to be executed + * before the request is made. + * @param {function} [opts.response] Specify a response handler to be executed + * after the response is received. + * @param {function} [opts.responseError] Specify an error handler to be + * executed on error. + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addAction(name, opts) { @@ -1145,37 +1147,34 @@ function addAction(name, opts) { mapper[name] = function (id, _opts) { var _this18 = this; + _opts = _opts || {}; if (jsData.utils.isObject(id)) { _opts = id; } - _opts = _opts || {}; - var adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http'); + jsData.utils.fillIn(_opts, opts); + var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); var config = {}; - jsData.utils.fillIn(config, opts); - if (!_opts.hasOwnProperty('endpoint') && config.endpoint) { - _opts.endpoint = config.endpoint; - } + config.mapper = this.name; + jsData.utils.deepMixIn(config, _opts); + config.method = config.method || 'GET'; if (typeof _opts.getEndpoint === 'function') { config.url = _opts.getEndpoint(this, _opts); } else { - var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, jsData.utils.isSorN(id) ? id : null, _opts)]; + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; if (jsData.utils.isSorN(id)) { args.push(id); } args.push(opts.pathname || name); config.url = makePath.apply(null, args); } - config.method = config.method || 'GET'; - config.mapper = this.name; - jsData.utils.deepMixIn(config, _opts); - return jsData.utils.resolve(config).then(_opts.request || opts.request).then(function (config) { + return jsData.utils.resolve(config).then(_opts.request).then(function (config) { return adapter.HTTP(config); }).then(function (data) { if (data && data.config) { data.config.mapper = _this18.name; } return data; - }).then(_opts.response || opts.response, _opts.responseError || opts.responseError); + }).then(_opts.response, _opts.responseError); }; return mapper; }; @@ -1187,19 +1186,19 @@ function addAction(name, opts) { * * @example * // CommonJS - * var JSData = require('js-data') + * var JSData = require('js-data'); * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore + * var DataStore = JSData.DataStore; * - * var JSDataHttp = require('js-data-http') - * var HttpAdapter = JSDataHttp.HttpAdapter - * var addActions = JSDataHttp.addActions + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addActions = JSDataHttp.addActions; * - * var adapter = new HttpAdapter() - * var store = new DataStore() + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); * - * store.registerAdapter('http', adapter, { default: true }) - * store.defineMapper('school') + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); * * addActions({ * // GET /reports/schools/:school_id/teachers @@ -1208,18 +1207,18 @@ function addAction(name, opts) { * pathname: 'teachers', * method: 'GET' * } - * })(store.getMapper('school')) + * })(store.getMapper('school')); * * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then(function (response) { + * store.getMapper('school').getTeacherReports(1234).then((response) => { * // ... - * }) + * }); * * @name module:js-data-http.addActions * @method - * @param {Object.} opts Object where the key is an action name + * @param {object.} opts Object where the key is an action name * and the value is the configuration for the action. - * @return {Function} Decoration function, which should be passed the mapper to + * @return {function} Decoration function, which should be passed the mapper to * decorate when invoked. */ function addActions(opts) { @@ -1236,7 +1235,7 @@ function addActions(opts) { * Details of the current version of the `js-data-http` module. * * @name module:js-data-http.version - * @type {Object} + * @type {object} * @property {string} version.full The full semver value. * @property {number} version.major The major version number. * @property {number} version.minor The minor version number. @@ -1247,7 +1246,7 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.2', + full: '3.0.0-rc.3', major: 3, minor: 0, patch: 0 diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index ea05885..8793147 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["/* global fetch:true Headers:true Request:true */\n\nimport {utils} from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (window.toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * })\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {Function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {Object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {Object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {Object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n * @param {Object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {Object} url\n * @param {Object} config\n * @param {Object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {Object} config\n * @param {Object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {Object} url\n * @param {Object} data\n * @param {Object} config\n * @param {Object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props Properties to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Array} props Array of property objects to send as the payload.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {Object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {Object} mapper The mapper used for the operation.\n * @param {Object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {Object} opts Configuration options.\n * @return {(Object|Array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {Object} config Request configuration.\n * @param {Object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {Object} config.headers Headers for the request.\n * @param {Object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n * @param {Object} [opts] Configuration options.\n */\n fetch (config, opts) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers)\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(new Request(buildUrl(config.url, config.params), requestConfig))\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {Object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {Object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {Object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {Object} data Payload for the request.\n * @param {Object} config Request configuration options.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {Object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {Object} mapper The Mapper that triggered the request.\n * @param {Object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {Object} query Selection query.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Object} props The update payload.\n * @param {Object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {Object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {Object} mapper The Mapper for the request.\n * @param {Array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {Object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addAction = JSDataHttp.addAction\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {Object} [opts] Action configuration\n * @param {string} [opts.adapter]\n * @param {string} [opts.pathname]\n * @param {Function} [opts.request]\n * @param {Function} [opts.response]\n * @param {Function} [opts.responseError]\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n if (utils.isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = this.getAdapter(opts.adapter || this.defaultAdapter || 'http')\n let config = {}\n utils.fillIn(config, opts)\n if (!_opts.hasOwnProperty('endpoint') && config.endpoint) {\n _opts.endpoint = config.endpoint\n }\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, utils.isSorN(id) ? id : null, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n config.method = config.method || 'GET'\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n return utils.resolve(config)\n .then(_opts.request || opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response || opts.response, _opts.responseError || opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data')\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore\n *\n * var JSDataHttp = require('js-data-http')\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var addActions = JSDataHttp.addActions\n *\n * var adapter = new HttpAdapter()\n * var store = new DataStore()\n *\n * store.registerAdapter('http', adapter, { default: true })\n * store.defineMapper('school')\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'))\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then(function (response) {\n * // ...\n * })\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {Object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {Function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {Object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * @example ES2015 Modules\n * import {HttpAdapter} from 'js-data-Http'\n * const adapter = new HttpAdapter()\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter\n * var adapter = new HttpAdapter()\n *\n * // ...\n * })\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import {HttpAdapter} from 'js-data-http'\n * // or: import {HttpAdapter} from 'js-data-http-node'\n * const JSDataHttp = require('js-data-http-node@3.0.0-beta.8')\n * const {HttpAdapter} = JSDataHttp\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass()\n * console.log(customHttpAdapter.foo())\n * console.log(CustomHttpAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass()\n * console.log(otherHttpAdapter.foo())\n * console.log(OtherHttpAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass()\n * console.log(anotherHttpAdapter.created_at)\n * console.log(anotherHttpAdapter.foo())\n * console.log(AnotherHttpAdapterClass.beep())\n *\n * @method HttpAdapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file From ba9d06dadac73edc3fda93ef129c368e9535f875 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Sun, 2 Jul 2017 15:59:12 -0700 Subject: [PATCH 10/10] 3.0.0 --- dist/js-data-http.js | 8609 ++++++++++++++------------- dist/js-data-http.js.map | 2 +- dist/js-data-http.min.js | 5 +- dist/js-data-http.min.js.map | 1 + fetch/dist/js-data-fetch.js | 5593 ++++++++--------- fetch/dist/js-data-fetch.js.map | 2 +- fetch/dist/js-data-fetch.min.js | 4 +- fetch/dist/js-data-fetch.min.js.map | 1 + node/dist/js-data-http-node.js | 196 +- node/dist/js-data-http-node.js.map | 2 +- 10 files changed, 7481 insertions(+), 6934 deletions(-) create mode 100644 dist/js-data-http.min.js.map create mode 100644 fetch/dist/js-data-fetch.min.js.map diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 0407a83..f9c163d 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,6 +1,6 @@ /*! * js-data-http -* @version 3.0.0-rc.3 - Homepage +* @version 3.0.0 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * @@ -10,4241 +10,4562 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) : typeof define === 'function' && define.amd ? define('js-data-http', ['exports', 'js-data'], factory) : (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); -}(this, function (exports,jsData) { 'use strict'; +}(this, (function (exports,jsData) { 'use strict'; + +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 axios = createCommonjsModule(function (module, exports) { +/* axios v0.16.2 | (c) 2017 by Matt Zabriskie */ +(function webpackUniversalModuleDefinition(root, factory) { + module.exports = factory(); +})(commonjsGlobal, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(1); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + var bind = __webpack_require__(3); + var Axios = __webpack_require__(5); + var defaults = __webpack_require__(6); + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils$$1.extend(instance, Axios.prototype, context); + + // Copy context to instance + utils$$1.extend(instance, context); + + return instance; + } + + // Create the default instance to be exported + var axios = createInstance(defaults); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios; + + // Factory for creating new instances + axios.create = function create(instanceConfig) { + return createInstance(utils$$1.merge(defaults, instanceConfig)); + }; + + // Expose Cancel & CancelToken + axios.Cancel = __webpack_require__(23); + axios.CancelToken = __webpack_require__(24); + axios.isCancel = __webpack_require__(20); + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = __webpack_require__(25); + + module.exports = axios; + + // Allow use of default import syntax in TypeScript + module.exports.default = axios; + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var bind = __webpack_require__(3); + var isBuffer = __webpack_require__(4); + + /*global toString:true*/ + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ + function isArray(val) { + return toString.call(val) === '[object Array]'; + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + function isArrayBuffer(val) { + return toString.call(val) === '[object ArrayBuffer]'; + } + + /** + * Determine if a value is a FormData + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ + function isFormData(val) { + return (typeof FormData !== 'undefined') && (val instanceof FormData); + } + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ + function isString(val) { + return typeof val === 'string'; + } + + /** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ + function isNumber(val) { + return typeof val === 'number'; + } + + /** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ + function isUndefined(val) { + return typeof val === 'undefined'; + } + + /** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ + function isObject(val) { + return val !== null && typeof val === 'object'; + } + + /** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ + function isDate(val) { + return toString.call(val) === '[object Date]'; + } + + /** + * Determine if a value is a File + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + function isFile(val) { + return toString.call(val) === '[object File]'; + } + + /** + * Determine if a value is a Blob + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ + function isBlob(val) { + return toString.call(val) === '[object Blob]'; + } + + /** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + function isFunction(val) { + return toString.call(val) === '[object Function]'; + } + + /** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ + function isStream(val) { + return isObject(val) && isFunction(val.pipe); + } + + /** + * Determine if a value is a URLSearchParams object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + function isURLSearchParams(val) { + return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; + } + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ + function trim(str) { + return str.replace(/^\s*/, '').replace(/\s*$/, ''); + } + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + */ + function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { + return false; + } + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' + ); + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ + function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object' && !isArray(obj)) { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (typeof result[key] === 'object' && typeof val === 'object') { + result[key] = merge(result[key], val); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ + function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; + } + + module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim + }; + + +/***/ }, +/* 3 */ +/***/ function(module, exports) { - var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {} + 'use strict'; + + module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; + }; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { - function interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex; + /*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + + // The _isBuffer check is for Safari 5-7 support, because it's missing + // Object.prototype.constructor. Remove this eventually + module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) + }; + + function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) } + + // For Node v0.10 support. Remove this eventually. + function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) + } + - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var defaults = __webpack_require__(6); + var utils$$1 = __webpack_require__(2); + var InterceptorManager = __webpack_require__(17); + var dispatchRequest = __webpack_require__(18); + var isAbsoluteURL = __webpack_require__(21); + var combineURLs = __webpack_require__(22); + + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ + function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; } + + /** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ + Axios.prototype.request = function request(config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof config === 'string') { + config = utils$$1.merge({ + url: arguments[0] + }, arguments[1]); + } + + config = utils$$1.merge(defaults, this.defaults, { method: 'get' }, config); + config.method = config.method.toLowerCase(); + + // Support baseURL config + if (config.baseURL && !isAbsoluteURL(config.url)) { + config.url = combineURLs(config.baseURL, config.url); + } + + // Hook up interceptors middleware + var chain = [dispatchRequest, undefined]; + var promise = Promise.resolve(config); + + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + chain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + chain.push(interceptor.fulfilled, interceptor.rejected); + }); + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + }; + + // Provide aliases for supported request methods + utils$$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(utils$$1.merge(config || {}, { + method: method, + url: url + })); + }; + }); + + utils$$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, data, config) { + return this.request(utils$$1.merge(config || {}, { + method: method, + url: url, + data: data + })); + }; + }); + + module.exports = Axios; + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { - var axios = createCommonjsModule(function (module, exports) { - /* axios v0.13.1 | (c) 2016 by Matt Zabriskie */ - (function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["axios"] = factory(); - else - root["axios"] = factory(); - })(commonjsGlobal, function() { - return /******/ (function(modules) { // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {}; - /******/ - /******/ // The require function - /******/ function __webpack_require__(moduleId) { - /******/ - /******/ // Check if module is in cache - /******/ if(installedModules[moduleId]) - /******/ return installedModules[moduleId].exports; - /******/ - /******/ // Create a new module (and put it into the cache) - /******/ var module = installedModules[moduleId] = { - /******/ exports: {}, - /******/ id: moduleId, - /******/ loaded: false - /******/ }; - /******/ - /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - /******/ - /******/ // Flag the module as loaded - /******/ module.loaded = true; - /******/ - /******/ // Return the exports of the module - /******/ return module.exports; - /******/ } - /******/ - /******/ - /******/ // expose the modules object (__webpack_modules__) - /******/ __webpack_require__.m = modules; - /******/ - /******/ // expose the module cache - /******/ __webpack_require__.c = installedModules; - /******/ - /******/ // __webpack_public_path__ - /******/ __webpack_require__.p = ""; - /******/ - /******/ // Load entry module and return exports - /******/ return __webpack_require__(0); - /******/ }) - /************************************************************************/ - /******/ ([ - /* 0 */ - /***/ function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(1); - - /***/ }, - /* 1 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - var bind = __webpack_require__(3); - var Axios = __webpack_require__(4); - - /** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * @return {Axios} A new instance of Axios - */ - function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - - // Copy axios.prototype to instance - utils.extend(instance, Axios.prototype, context); - - // Copy context to instance - utils.extend(instance, context); - - return instance; - } - - // Create the default instance to be exported - var axios = module.exports = createInstance(); - - // Expose Axios class to allow class inheritance - axios.Axios = Axios; - - // Factory for creating new instances - axios.create = function create(defaultConfig) { - return createInstance(defaultConfig); - }; - - // Expose all/spread - axios.all = function all(promises) { - return Promise.all(promises); - }; - axios.spread = __webpack_require__(21); - - - /***/ }, - /* 2 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var bind = __webpack_require__(3); - - /*global toString:true*/ - - // utils is a library of generic helper functions non-specific to axios - - var toString = Object.prototype.toString; - - /** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ - function isArray(val) { - return toString.call(val) === '[object Array]'; - } - - /** - * Determine if a value is an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ - function isArrayBuffer(val) { - return toString.call(val) === '[object ArrayBuffer]'; - } - - /** - * Determine if a value is a FormData - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ - function isFormData(val) { - return (typeof FormData !== 'undefined') && (val instanceof FormData); - } - - /** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ - function isArrayBufferView(val) { - var result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); - } - return result; - } - - /** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ - function isString(val) { - return typeof val === 'string'; - } - - /** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ - function isNumber(val) { - return typeof val === 'number'; - } - - /** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ - function isUndefined(val) { - return typeof val === 'undefined'; - } - - /** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ - function isObject(val) { - return val !== null && typeof val === 'object'; - } - - /** - * Determine if a value is a Date - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ - function isDate(val) { - return toString.call(val) === '[object Date]'; - } - - /** - * Determine if a value is a File - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ - function isFile(val) { - return toString.call(val) === '[object File]'; - } - - /** - * Determine if a value is a Blob - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ - function isBlob(val) { - return toString.call(val) === '[object Blob]'; - } - - /** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ - function isFunction(val) { - return toString.call(val) === '[object Function]'; - } - - /** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ - function isStream(val) { - return isObject(val) && isFunction(val.pipe); - } - - /** - * Determine if a value is a URLSearchParams object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ - function isURLSearchParams(val) { - return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; - } - - /** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ - function trim(str) { - return str.replace(/^\s*/, '').replace(/\s*$/, ''); - } - - /** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * typeof document.createElement -> undefined - */ - function isStandardBrowserEnv() { - return ( - typeof window !== 'undefined' && - typeof document !== 'undefined' && - typeof document.createElement === 'function' - ); - } - - /** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ - function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (typeof obj !== 'object' && !isArray(obj)) { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - fn.call(null, obj[key], key, obj); - } - } - } - } - - /** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ - function merge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (typeof result[key] === 'object' && typeof val === 'object') { - result[key] = merge(result[key], val); - } else { - result[key] = val; - } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; - } - - /** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * @return {Object} The resulting value of object a - */ - function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === 'function') { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; - } - - module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isURLSearchParams: isURLSearchParams, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - extend: extend, - trim: trim - }; - - - /***/ }, - /* 3 */ - /***/ function(module, exports) { - - 'use strict'; - - module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; - }; - - - /***/ }, - /* 4 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var defaults = __webpack_require__(5); - var utils = __webpack_require__(2); - var InterceptorManager = __webpack_require__(7); - var dispatchRequest = __webpack_require__(8); - var isAbsoluteURL = __webpack_require__(19); - var combineURLs = __webpack_require__(20); - - /** - * Create a new instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - */ - function Axios(defaultConfig) { - this.defaults = utils.merge(defaults, defaultConfig); - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; - } - - /** - * Dispatch a request - * - * @param {Object} config The config specific for this request (merged with this.defaults) - */ - Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = utils.merge({ - url: arguments[0] - }, arguments[1]); - } - - config = utils.merge(defaults, this.defaults, { method: 'get' }, config); - - // Support baseURL config - if (config.baseURL && !isAbsoluteURL(config.url)) { - config.url = combineURLs(config.baseURL, config.url); - } - - // Hook up interceptors middleware - var chain = [dispatchRequest, undefined]; - var promise = Promise.resolve(config); - - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - chain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - chain.push(interceptor.fulfilled, interceptor.rejected); - }); - - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - - return promise; - }; - - // Provide aliases for supported request methods - utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url - })); - }; - }); - - utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url, - data: data - })); - }; - }); - - module.exports = Axios; - - - /***/ }, - /* 5 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - var normalizeHeaderName = __webpack_require__(6); - - var PROTECTION_PREFIX = /^\)\]\}',?\n/; - var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - - function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } - } - - module.exports = { - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Content-Type'); - if (utils.isFormData(data) || - utils.isArrayBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) - ) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - if (utils.isObject(data)) { - setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); - return JSON.stringify(data); - } - return data; - }], - - transformResponse: [function transformResponse(data) { - /*eslint no-param-reassign:0*/ - if (typeof data === 'string') { - data = data.replace(PROTECTION_PREFIX, ''); - try { - data = JSON.parse(data); - } catch (e) { /* Ignore */ } - } - return data; - }], - - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - patch: utils.merge(DEFAULT_CONTENT_TYPE), - post: utils.merge(DEFAULT_CONTENT_TYPE), - put: utils.merge(DEFAULT_CONTENT_TYPE) - }, - - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - } - }; - - - /***/ }, - /* 6 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); - }; - - - /***/ }, - /* 7 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - function InterceptorManager() { - this.handlers = []; - } - - /** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ - InterceptorManager.prototype.use = function use(fulfilled, rejected) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected - }); - return this.handlers.length - 1; - }; - - /** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ - InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } - }; - - /** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ - InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); - }; - - module.exports = InterceptorManager; - - - /***/ }, - /* 8 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - var transformData = __webpack_require__(9); - - /** - * Dispatch a request to the server using whichever adapter - * is supported by the current environment. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ - module.exports = function dispatchRequest(config) { - // Ensure headers exist - config.headers = config.headers || {}; - - // Transform request data - config.data = transformData( - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers || {} - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - - var adapter; - - if (typeof config.adapter === 'function') { - // For custom adapter support - adapter = config.adapter; - } else if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __webpack_require__(10); - } else if (typeof process !== 'undefined') { - // For node use HTTP adapter - adapter = __webpack_require__(10); - } - - return Promise.resolve(config) - // Wrap synchronous adapter errors and pass configuration - .then(adapter) - .then(function onFulfilled(response) { - // Transform response data - response.data = transformData( - response.data, - response.headers, - config.transformResponse - ); - - return response; - }, function onRejected(error) { - // Transform response data - if (error && error.response) { - error.response.data = transformData( - error.response.data, - error.response.headers, - config.transformResponse - ); - } - - return Promise.reject(error); - }); - }; - - - /***/ }, - /* 9 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - /** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ - module.exports = function transformData(data, headers, fns) { - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn(data, headers); - }); - - return data; - }; - - - /***/ }, - /* 10 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - var settle = __webpack_require__(11); - var buildURL = __webpack_require__(14); - var parseHeaders = __webpack_require__(15); - var isURLSameOrigin = __webpack_require__(16); - var createError = __webpack_require__(12); - var btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17); - - module.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - var loadEvent = 'onreadystatechange'; - var xDomain = false; - - // For IE 8/9 CORS support - // Only supports POST and GET calls and doesn't returns the response headers. - // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. - if (("production") !== 'test' && - typeof window !== 'undefined' && - window.XDomainRequest && !('withCredentials' in request) && - !isURLSameOrigin(config.url)) { - request = new window.XDomainRequest(); - loadEvent = 'onload'; - xDomain = true; - request.onprogress = function handleProgress() {}; - request.ontimeout = function handleTimeout() {}; - } - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password || ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - - request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - - // Listen for ready state - request[loadEvent] = function handleLoad() { - if (!request || (request.readyState !== 4 && !xDomain)) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - if (request.status === 0) { - return; - } - - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; - var response = { - data: responseData, - // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) - status: request.status === 1223 ? 204 : request.status, - statusText: request.status === 1223 ? 'No Content' : request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - - settle(resolve, reject, response); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(createError('Network Error', config)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED')); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - var cookies = __webpack_require__(18); - - // Add xsrf header - var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ? - cookies.read(config.xsrfCookieName) : - undefined; - - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (config.withCredentials) { - request.withCredentials = true; - } - - // Add responseType to request if needed - if (config.responseType) { - try { - request.responseType = config.responseType; - } catch (e) { - if (request.responseType !== 'json') { - throw e; - } - } - } - - // Handle progress if needed - if (typeof config.progress === 'function') { - if (config.method === 'post' || config.method === 'put') { - request.upload.addEventListener('progress', config.progress); - } else if (config.method === 'get') { - request.addEventListener('progress', config.progress); - } - } - - if (requestData === undefined) { - requestData = null; - } - - // Send the request - request.send(requestData); - }); - }; - - - /***/ }, - /* 11 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var createError = __webpack_require__(12); - - /** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ - module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - // Note: status is not exposed by XDomainRequest - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(createError( - 'Request failed with status code ' + response.status, - response.config, - null, - response - )); - } - }; - - - /***/ }, - /* 12 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var enhanceError = __webpack_require__(13); - - /** - * Create an Error with the specified message, config, error code, and response. - * - * @param {string} message The error message. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - @ @param {Object} [response] The response. - * @returns {Error} The created error. - */ - module.exports = function createError(message, config, code, response) { - var error = new Error(message); - return enhanceError(error, config, code, response); - }; - - - /***/ }, - /* 13 */ - /***/ function(module, exports) { - - 'use strict'; - - /** - * Update an Error with the specified config, error code, and response. - * - * @param {Error} error The error to update. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - @ @param {Object} [response] The response. - * @returns {Error} The error. - */ - module.exports = function enhanceError(error, config, code, response) { - error.config = config; - if (code) { - error.code = code; - } - error.response = response; - return error; - }; - - - /***/ }, - /* 14 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - function encode(val) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); - } - - /** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ - module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - - if (utils.isArray(val)) { - key = key + '[]'; - } - - if (!utils.isArray(val)) { - val = [val]; - } - - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - serializedParams = parts.join('&'); - } - - if (serializedParams) { - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; - }; - - - /***/ }, - /* 15 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - /** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ - module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - - if (!headers) { return parsed; } - - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - }); - - return parsed; - }; - - - /***/ }, - /* 16 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - (function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') ? - urlParsingNode.pathname : - '/' + urlParsingNode.pathname - }; - } - - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; - return (parsed.protocol === originURL.protocol && - parsed.host === originURL.host); - }; - })() : - - // Non standard browser envs (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - })() - ); - - - /***/ }, - /* 17 */ - /***/ function(module, exports) { - - 'use strict'; - - // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js - - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - function E() { - this.message = 'String contains an invalid character'; - } - E.prototype = new Error; - E.prototype.code = 5; - E.prototype.name = 'InvalidCharacterError'; - - function btoa(input) { - var str = String(input); - var output = ''; - for ( - // initialize result and counter - var block, charCode, idx = 0, map = chars; - // if the next str index does not exist: - // change the mapping table to "=" - // check if d has no fractional digits - str.charAt(idx | 0) || (map = '=', idx % 1); - // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 - output += map.charAt(63 & block >> 8 - idx % 1 * 8) - ) { - charCode = str.charCodeAt(idx += 3 / 4); - if (charCode > 0xFF) { - throw new E(); - } - block = block << 8 | charCode; - } - return output; - } - - module.exports = btoa; - - - /***/ }, - /* 18 */ - /***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(2); - - module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - - if (utils.isString(path)) { - cookie.push('path=' + path); - } - - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - - if (secure === true) { - cookie.push('secure'); - } - - document.cookie = cookie.join('; '); - }, - - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; - })() : - - // Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })() - ); - - - /***/ }, - /* 19 */ - /***/ function(module, exports) { - - 'use strict'; - - /** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ - module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); - }; - - - /***/ }, - /* 20 */ - /***/ function(module, exports) { - - 'use strict'; - - /** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL - */ - module.exports = function combineURLs(baseURL, relativeURL) { - return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, ''); - }; - - - /***/ }, - /* 21 */ - /***/ function(module, exports) { - - 'use strict'; - - /** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * @returns {Function} - */ - module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; - }; - - - /***/ } - /******/ ]) + 'use strict'; + + var utils$$1 = __webpack_require__(2); + var normalizeHeaderName = __webpack_require__(7); + + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + function setContentTypeIfUnset(headers, value) { + if (!utils$$1.isUndefined(headers) && utils$$1.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } + } + + function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(8); + } else if (typeof process !== 'undefined') { + // For node use HTTP adapter + adapter = __webpack_require__(8); + } + return adapter; + } + + var defaults = { + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Content-Type'); + if (utils$$1.isFormData(data) || + utils$$1.isArrayBuffer(data) || + utils$$1.isBuffer(data) || + utils$$1.isStream(data) || + utils$$1.isFile(data) || + utils$$1.isBlob(data) + ) { + return data; + } + if (utils$$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$$1.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + if (utils$$1.isObject(data)) { + setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); + return JSON.stringify(data); + } + return data; + }], + + transformResponse: [function transformResponse(data) { + /*eslint no-param-reassign:0*/ + if (typeof data === 'string') { + try { + data = JSON.parse(data); + } catch (e) { /* Ignore */ } + } + return data; + }], + + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + } + }; + + defaults.headers = { + common: { + 'Accept': 'application/json, text/plain, */*' + } + }; + + utils$$1.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; }); - ; + + utils$$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils$$1.merge(DEFAULT_CONTENT_TYPE); }); + + module.exports = defaults; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + module.exports = function normalizeHeaderName(headers, normalizedName) { + utils$$1.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); + }; - var axios$1 = interopDefault(axios); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + var settle = __webpack_require__(9); + var buildURL = __webpack_require__(12); + var parseHeaders = __webpack_require__(13); + var isURLSameOrigin = __webpack_require__(14); + var createError = __webpack_require__(10); + var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(15); + + module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + + if (utils$$1.isFormData(requestData)) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + var loadEvent = 'onreadystatechange'; + var xDomain = false; + + // For IE 8/9 CORS support + // Only supports POST and GET calls and doesn't returns the response headers. + // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. + if (("production") !== 'test' && + typeof window !== 'undefined' && + window.XDomainRequest && !('withCredentials' in request) && + !isURLSameOrigin(config.url)) { + request = new window.XDomainRequest(); + loadEvent = 'onload'; + xDomain = true; + request.onprogress = function handleProgress() {}; + request.ontimeout = function handleTimeout() {}; + } + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + // Listen for ready state + request[loadEvent] = function handleLoad() { + if (!request || (request.readyState !== 4 && !xDomain)) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; + var response = { + data: responseData, + // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) + status: request.status === 1223 ? 204 : request.status, + statusText: request.status === 1223 ? 'No Content' : request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(createError('Network Error', config, null, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils$$1.isStandardBrowserEnv()) { + var cookies = __webpack_require__(16); + + // Add xsrf header + var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$$1.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (config.withCredentials) { + request.withCredentials = true; + } + + // Add responseType to request if needed + if (config.responseType) { + try { + request.responseType = config.responseType; + } catch (e) { + // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. + // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. + if (config.responseType !== 'json') { + throw e; + } + } + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken) { + // Handle cancellation + config.cancelToken.promise.then(function onCanceled(cancel) { + if (!request) { + return; + } + + request.abort(); + reject(cancel); + // Clean up request + request = null; + }); + } + + if (requestData === undefined) { + requestData = null; + } + + // Send the request + request.send(requestData); + }); }; - var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var createError = __webpack_require__(10); + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + // Note: status is not exposed by XDomainRequest + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); } else { - obj[key] = value; + reject(createError( + 'Request failed with status code ' + response.status, + response.config, + null, + response.request, + response + )); } + }; + - return obj; +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var enhanceError = __webpack_require__(11); + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ + module.exports = function createError(message, config, code, request, response) { + var error = new Error(message); + return enhanceError(error, config, code, request, response); + }; + + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Update an Error with the specified config, error code, and response. + * + * @param {Error} error The error to update. + * @param {Object} config The config. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The error. + */ + module.exports = function enhanceError(error, config, code, request, response) { + error.config = config; + if (code) { + error.code = code; + } + error.request = request; + error.response = response; + return error; + }; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + function encode(val) { + return encodeURIComponent(val). + replace(/%40/gi, '@'). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ + module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else if (utils$$1.isURLSearchParams(params)) { + serializedParams = params.toString(); + } else { + var parts = []; + + utils$$1.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils$$1.isArray(val)) { + key = key + '[]'; + } + + if (!utils$$1.isArray(val)) { + val = [val]; + } + + utils$$1.forEach(val, function parseValue(v) { + if (utils$$1.isDate(v)) { + v = v.toISOString(); + } else if (utils$$1.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; + }; + + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ + module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils$$1.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils$$1.trim(line.substr(0, i)).toLowerCase(); + val = utils$$1.trim(line.substr(i + 1)); + + if (key) { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; + }; + + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + module.exports = ( + utils$$1.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils$$1.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() + ); + + +/***/ }, +/* 15 */ +/***/ function(module, exports) { + + 'use strict'; + + // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js + + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + function E() { + this.message = 'String contains an invalid character'; + } + E.prototype = new Error; + E.prototype.code = 5; + E.prototype.name = 'InvalidCharacterError'; + + function btoa(input) { + var str = String(input); + var output = ''; + for ( + // initialize result and counter + var block, charCode, idx = 0, map = chars; + // if the next str index does not exist: + // change the mapping table to "=" + // check if d has no fractional digits + str.charAt(idx | 0) || (map = '=', idx % 1); + // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = str.charCodeAt(idx += 3 / 4); + if (charCode > 0xFF) { + throw new E(); + } + block = block << 8 | charCode; + } + return output; + } + + module.exports = btoa; + + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + module.exports = ( + utils$$1.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils$$1.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils$$1.isString(path)) { + cookie.push('path=' + path); + } + + if (utils$$1.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() + ); + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils$$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + module.exports = InterceptorManager; + + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + var transformData = __webpack_require__(19); + var isCancel = __webpack_require__(20); + var defaults = __webpack_require__(6); + + /** + * Throws a `Cancel` if cancellation has been requested. + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + module.exports = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils$$1.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers || {} + ); + + utils$$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData( + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData( + reason.response.data, + reason.response.headers, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); + }; + + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var utils$$1 = __webpack_require__(2); + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + module.exports = function transformData(data, headers, fns) { + /*eslint no-param-reassign:0*/ + utils$$1.forEach(fns, function transform(fn) { + data = fn(data, headers); + }); + + return data; + }; + + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + + 'use strict'; + + module.exports = function isCancel(value) { + return !!(value && value.__CANCEL__); + }; + + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + 'use strict'; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); }; - var slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } +/***/ }, +/* 22 */ +/***/ function(module, exports) { - return _arr; - } + 'use strict'; + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ + module.exports = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; + }; - return function (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"); - } - }; - }(); - var noop = function noop() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } +/***/ }, +/* 23 */ +/***/ function(module, exports) { - var opts = args[args.length - 1]; - this.dbg.apply(this, [opts.op].concat(args)); - return jsData.utils.resolve(); + 'use strict'; + + /** + * A `Cancel` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + */ + function Cancel(message) { + this.message = message; + } + + Cancel.prototype.toString = function toString() { + return 'Cancel' + (this.message ? ': ' + this.message : ''); }; + + Cancel.prototype.__CANCEL__ = true; + + module.exports = Cancel; - var noop2 = function noop2() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - var opts = args[args.length - 2]; - this.dbg.apply(this, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { - var unique = function unique(array) { - var seen = {}; - var final = []; - array.forEach(function (item) { - if (item in seen) { + 'use strict'; + + var Cancel = __webpack_require__(23); + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ + function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + executor(function cancel(message) { + if (token.reason) { + // Cancellation has already been requested return; } - final.push(item); - seen[item] = 0; + + token.reason = new Cancel(message); + resolvePromise(token.reason); }); - return final; + } + + /** + * Throws a `Cancel` if cancellation has been requested. + */ + CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } }; - - var withoutRelations = function withoutRelations(mapper, props, opts) { - opts || (opts = {}); - opts.with || (opts.with = []); - var relationFields = mapper.relationFields || []; - var toStrip = relationFields.filter(function (value) { - return opts.with.indexOf(value) === -1; + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; }); - return jsData.utils.omit(props, toStrip); + return { + token: token, + cancel: cancel + }; }; + + module.exports = CancelToken; - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - meta || (meta = {}); - - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - this.data = data; - - jsData.utils.fillIn(this, meta); - - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - this.op = op; - } - var DEFAULTS$1 = { - /** - * Whether to log debugging information. - * - * @name Adapter#debug - * @type {boolean} - * @default false - */ - debug: false, - - /** - * Whether to return a more detailed response object. - * - * @name Adapter#raw - * @type {boolean} - * @default false - */ - raw: false - }; +/***/ }, +/* 25 */ +/***/ function(module, exports) { + 'use strict'; + /** - * Abstract class meant to be extended by adapters. + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. * - * @class Adapter - * @abstract - * @extends Component - * @param {Object} [opts] Configuration opts. - * @param {boolean} [opts.debug=false] Whether to log debugging information. - * @param {boolean} [opts.raw=false] Whether to return a more detailed response - * object. + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} */ - function Adapter(opts) { - jsData.utils.classCallCheck(this, Adapter); - jsData.Component.call(this, opts); - opts || (opts = {}); - jsData.utils.fillIn(opts, DEFAULTS$1); - jsData.utils.fillIn(this, opts); - } + module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + }; - jsData.Component.extend({ - constructor: Adapter, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#afterCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} props The `props` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `afterCount` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterCount: noop2, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `afterCreate` - * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreate: noop2, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `afterCreateMany` - * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreateMany: noop2, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#afterDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `afterDestroy` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroy: noop2, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#afterDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `afterDestroyAll` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroyAll: noop2, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#afterFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `afterFind` - * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. - */ - afterFind: noop2, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#afterFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `afterFindAll` - * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. - */ - afterFindAll: noop2, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#afterSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {string} field The `field` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `afterSum` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterSum: noop2, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#afterUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `afterUpdate` - * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdate: noop2, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#afterUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `afterUpdateAll` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateAll: noop2, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#afterUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} records The `records` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `afterUpdateMany` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateMany: noop2, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#beforeCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} query The `query` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `beforeCount` - */ - beforeCount: noop, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#beforeCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `beforeCreate` - */ - beforeCreate: noop, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#beforeCreateMany - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `beforeCreateMany` - */ - beforeCreateMany: noop, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#beforeDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `beforeDestroy` - */ - beforeDestroy: noop, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#beforeDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `beforeDestroyAll` - */ - beforeDestroyAll: noop, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#beforeFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `beforeFind` - */ - beforeFind: noop, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#beforeFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `beforeFindAll` - */ - beforeFindAll: noop, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#beforeSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `beforeSum` - */ - beforeSum: noop, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#beforeUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `beforeUpdate` - */ - beforeUpdate: noop, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#beforeUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `beforeUpdateAll` - */ - beforeUpdateAll: noop, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#beforeUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} props The `props` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `beforeUpdateMany` - */ - beforeUpdateMany: noop, - - /** - * Retrieve the number of records that match the selection query. Called by - * `Mapper#count`. - * - * @name Adapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var _this = this; - - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeCount lifecycle hook - op = opts.op = 'beforeCount'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'count'; - _this.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this._count(mapper, query, opts)); - }).then(function (results) { - var _results = slicedToArray(results, 2); - - var data = _results[0]; - var result = _results[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = _this.respond(response, opts); - - // afterCount lifecycle hook - op = opts.op = 'afterCount'; - return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Create a new record. Called by `Mapper#create`. - * - * @name Adapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The record to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var _this2 = this; - - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreate lifecycle hook - op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'create'; - _this2.dbg(op, mapper, props, opts); - return jsData.utils.resolve(_this2._create(mapper, props, opts)); - }).then(function (results) { - var _results2 = slicedToArray(results, 2); - - var data = _results2[0]; - var result = _results2[1]; - - result || (result = {}); - var response = new Response(data, result, 'create'); - response.created = data ? 1 : 0; - response = _this2.respond(response, opts); - - // afterCreate lifecycle hook - op = opts.op = 'afterCreate'; - return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Create multiple records in a single batch. Called by `Mapper#createMany`. - * - * @name Adapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The records to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var _this3 = this; - - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreateMany lifecycle hook - op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = props.map(function (record) { - return withoutRelations(mapper, record, opts); - }); - op = opts.op = 'createMany'; - _this3.dbg(op, mapper, props, opts); - return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); - }).then(function (results) { - var _results3 = slicedToArray(results, 2); - - var data = _results3[0]; - var result = _results3[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'createMany'); - response.created = data.length; - response = _this3.respond(response, opts); - - // afterCreateMany lifecycle hook - op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Destroy the record with the given primary key. Called by - * `Mapper#destroy`. - * - * @name Adapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var _this4 = this; - - var op = void 0; - opts || (opts = {}); - - // beforeDestroy lifecycle hook - op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { - op = opts.op = 'destroy'; - _this4.dbg(op, mapper, id, opts); - return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); - }).then(function (results) { - var _results4 = slicedToArray(results, 2); - - var data = _results4[0]; - var result = _results4[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroy'); - response = _this4.respond(response, opts); - - // afterDestroy lifecycle hook - op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Destroy the records that match the selection query. Called by - * `Mapper#destroyAll`. - * - * @name Adapter#destroyAll - * @method - * @param {Object} mapper the mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var _this5 = this; - - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeDestroyAll lifecycle hook - op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - op = opts.op = 'destroyAll'; - _this5.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); - }).then(function (results) { - var _results5 = slicedToArray(results, 2); - - var data = _results5[0]; - var result = _results5[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroyAll'); - response = _this5.respond(response, opts); - - // afterDestroyAll lifecycle hook - op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Load a belongsTo relationship. - * - * Override with care. - * - * @name Adapter#loadBelongsTo - * @method - * @return {Promise} - */ - loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var _this6 = this; - - var relationDef = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - var _ret = function () { - var record = records; - return { - v: _this6.find(relationDef, _this6.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { - def.setLocalField(record, relatedItem); - }) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } else { - var keys = records.map(function (record) { - return _this6.makeBelongsToForeignKey(mapper, def, record); - }).filter(function (key) { - return key; - }); - return this.findAll(relationDef, { - where: defineProperty({}, relationDef.idAttribute, { - 'in': keys - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (record) { - relatedItems.forEach(function (relatedItem) { - if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { - def.setLocalField(record, relatedItem); - } - }); - }); - }); - } - }, - - - /** - * Retrieve the record with the given primary key. Called by `Mapper#find`. - * - * @name Adapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var _this7 = this; - - var record = void 0, - op = void 0; - var meta = {}; - opts || (opts = {}); - opts.with || (opts.with = []); - - // beforeFind lifecycle hook - op = opts.op = 'beforeFind'; - return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { - op = opts.op = 'find'; - _this7.dbg(op, mapper, id, opts); - return jsData.utils.resolve(_this7._find(mapper, id, opts)); - }).then(function (results) { - var _results6 = slicedToArray(results, 2); - - var _record = _results6[0]; - var _meta = _results6[1]; - - if (!_record) { - return; - } - record = _record; - meta = _meta; - var tasks = []; - - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasOne') { - task = _this7.loadHasOne(mapper, def, record, __opts); - } else { - task = _this7.loadHasMany(mapper, def, record, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = _this7.loadHasManyLocalKeys(mapper, def, record, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = _this7.loadHasManyForeignKeys(mapper, def, record, __opts); - } else if (def.type === 'belongsTo') { - task = _this7.loadBelongsTo(mapper, def, record, __opts); - } - if (task) { - tasks.push(task); - } - }); - return jsData.utils.Promise.all(tasks); - }).then(function () { - var response = new Response(record, meta, 'find'); - response.found = record ? 1 : 0; - response = _this7.respond(response, opts); +/***/ } +/******/ ]) +}); - // afterFind lifecycle hook - op = opts.op = 'afterFind'; - return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Retrieve the records that match the selection query. - * - * @name Adapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var _this8 = this; - - opts || (opts = {}); - opts.with || (opts.with = []); - - var records = []; - var meta = {}; - var op = void 0; - var activeWith = opts._activeWith; - - if (jsData.utils.isObject(activeWith)) { - var activeQuery = activeWith.query || {}; - if (activeWith.replace) { - query = activeQuery; - } else { - jsData.utils.deepFillIn(query, activeQuery); - } - } - // beforeFindAll lifecycle hook - op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - op = opts.op = 'findAll'; - _this8.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); - }).then(function (results) { - var _results7 = slicedToArray(results, 2); - - var _records = _results7[0]; - var _meta = _results7[1]; - - _records || (_records = []); - records = _records; - meta = _meta; - var tasks = []; - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasMany') { - task = _this8.loadHasMany(mapper, def, records, __opts); - } else { - task = _this8.loadHasOne(mapper, def, records, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = _this8.loadHasManyLocalKeys(mapper, def, records, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = _this8.loadHasManyForeignKeys(mapper, def, records, __opts); - } else if (def.type === 'belongsTo') { - task = _this8.loadBelongsTo(mapper, def, records, __opts); - } - if (task) { - tasks.push(task); - } - }); - return jsData.utils.Promise.all(tasks); - }).then(function () { - var response = new Response(records, meta, 'findAll'); - response.found = records.length; - response = _this8.respond(response, opts); - - // afterFindAll lifecycle hook - op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Resolve the value of the specified option based on the given options and - * this adapter's settings. Override with care. - * - * @name Adapter#getOpt - * @method - * @param {string} opt The name of the option. - * @param {Object} [opts] Configuration options. - * @return {*} The value of the specified option. - */ - getOpt: function getOpt(opt, opts) { - opts || (opts = {}); - return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); - }, - - - /** - * Load a hasMany relationship. - * - * Override with care. - * - * @name Adapter#loadHasMany - * @method - * @return {Promise} - */ - loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var _this9 = this; - - var singular = false; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - singular = true; - records = [records]; - } - var IDs = records.map(function (record) { - return _this9.makeHasManyForeignKey(mapper, def, record); - }); - var query = { - where: {} - }; - var criteria = query.where[def.foreignKey] = {}; - if (singular) { - // more efficient query when we only have one record - criteria['=='] = IDs[0]; - } else { - criteria['in'] = IDs.filter(function (id) { - return id; - }); - } - return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { - records.forEach(function (record) { - var attached = []; - // avoid unneccesary iteration when we only have one record - if (singular) { - attached = relatedItems; - } else { - relatedItems.forEach(function (relatedItem) { - if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { - attached.push(relatedItem); - } - }); - } - def.setLocalField(record, attached); - }); - }); - }, - loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var _this10 = this; +}); - var record = void 0; - var relatedMapper = def.getRelation(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - if (record) { - return this.findAll(relatedMapper, { - where: defineProperty({}, relatedMapper.idAttribute, { - 'in': this.makeHasManyLocalKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - var _ret2 = function () { - var localKeys = []; - records.forEach(function (record) { - localKeys = localKeys.concat(_this10.makeHasManyLocalKeys(mapper, def, record)); - }); - return { - v: _this10.findAll(relatedMapper, { - where: defineProperty({}, relatedMapper.idAttribute, { - 'in': unique(localKeys).filter(function (x) { - return x; - }) - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (item) { - var attached = []; - var itemKeys = jsData.utils.get(item, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - relatedItems.forEach(function (relatedItem) { - if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { - attached.push(relatedItem); - } - }); - def.setLocalField(item, attached); - }); - return relatedItems; - }) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; - } - }, - loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var _this11 = this; - var relatedMapper = def.getRelation(); - var idAttribute = mapper.idAttribute; - var record = void 0; - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - if (record) { - return this.findAll(def.getRelation(), { - where: defineProperty({}, def.foreignKeys, { - 'contains': this.makeHasManyForeignKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - return this.findAll(relatedMapper, { - where: defineProperty({}, def.foreignKeys, { - 'isectNotEmpty': records.map(function (record) { - return _this11.makeHasManyForeignKeys(mapper, def, record); - }) - }) - }, __opts).then(function (relatedItems) { - var foreignKeysField = def.foreignKeys; - records.forEach(function (record) { - var _relatedItems = []; - var id = jsData.utils.get(record, idAttribute); - relatedItems.forEach(function (relatedItem) { - var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; - if (foreignKeys.indexOf(id) !== -1) { - _relatedItems.push(relatedItem); - } - }); - def.setLocalField(record, _relatedItems); - }); - }); - } - }, - - - /** - * Load a hasOne relationship. - * - * Override with care. - * - * @name Adapter#loadHasOne - * @method - * @return {Promise} - */ - loadHasOne: function loadHasOne(mapper, def, records, __opts) { - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - records = [records]; - } - return this.loadHasMany(mapper, def, records, __opts).then(function () { - records.forEach(function (record) { - var relatedData = def.getLocalField(record); - if (jsData.utils.isArray(relatedData) && relatedData.length) { - def.setLocalField(record, relatedData[0]); - } - }); - }); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * There may be reasons why you may want to override this method, like when - * the id of the parent doesn't exactly match up to the key on the child. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKey - * @method - * @return {*} - */ - makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Return the localKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyLocalKeys - * @method - * @return {*} - */ - makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { - var localKeys = []; - var itemKeys = jsData.utils.get(record, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - localKeys = localKeys.concat(itemKeys); - return unique(localKeys).filter(function (x) { - return x; - }); - }, - - - /** - * Return the foreignKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKeys - * @method - * @return {*} - */ - makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { - return jsData.utils.get(record, mapper.idAttribute); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeBelongsToForeignKey - * @method - * @return {*} - */ - makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Retrieve sum of the specified field of the records that match the selection - * query. Called by `Mapper#sum`. - * - * @name Adapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field By to sum. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var _this12 = this; - - var op = void 0; - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); - } - query || (query = {}); - opts || (opts = {}); - - // beforeSum lifecycle hook - op = opts.op = 'beforeSum'; - return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'sum'; - _this12.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(_this12._sum(mapper, field, query, opts)); - }).then(function (results) { - var _results8 = slicedToArray(results, 2); - - var data = _results8[0]; - var result = _results8[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = _this12.respond(response, opts); - - // afterSum lifecycle hook - op = opts.op = 'afterSum'; - return jsData.utils.resolve(_this12[op](mapper, field, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * @name Adapter#respond - * @method - * @param {Object} response Response object. - * @param {Object} opts Configuration options. - * return {Object} If `opts.raw == true` then return `response`, else return - * `response.data`. - */ - respond: function respond(response, opts) { - return this.getOpt('raw', opts) ? response : response.data; - }, - - - /** - * Apply the given update to the record with the specified primary key. Called - * by `Mapper#update`. - * - * @name Adapter#update - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id The primary key of the record to be updated. - * @param {Object} props The update to apply to the record. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var _this13 = this; - - props || (props = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdate lifecycle hook - op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'update'; - _this13.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(_this13._update(mapper, id, props, opts)); - }).then(function (results) { - var _results9 = slicedToArray(results, 2); - - var data = _results9[0]; - var result = _results9[1]; - - result || (result = {}); - var response = new Response(data, result, 'update'); - response.updated = data ? 1 : 0; - response = _this13.respond(response, opts); - - // afterUpdate lifecycle hook - op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(_this13[op](mapper, id, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Apply the given update to all records that match the selection query. - * Called by `Mapper#updateAll`. - * - * @name Adapter#updateAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The update to apply to the selected records. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var _this14 = this; - - props || (props = {}); - query || (query = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdateAll lifecycle hook - op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'updateAll'; - _this14.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(_this14._updateAll(mapper, props, query, opts)); - }).then(function (results) { - var _results10 = slicedToArray(results, 2); - - var data = _results10[0]; - var result = _results10[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateAll'); - response.updated = data.length; - response = _this14.respond(response, opts); - - // afterUpdateAll lifecycle hook - op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(_this14[op](mapper, props, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Update the given records in a single batch. Called by `Mapper#updateMany`. - * - * @name Adapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Object[]} records The records to update. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var _this15 = this; - - records || (records = []); - opts || (opts = {}); - var op = void 0; - var idAttribute = mapper.idAttribute; - - records = records.filter(function (record) { - return jsData.utils.get(record, idAttribute); - }); - // beforeUpdateMany lifecycle hook - op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { - // Allow for re-assignment from lifecycle hook - records = _records === undefined ? records : _records; - records = records.map(function (record) { - return withoutRelations(mapper, record, opts); - }); - op = opts.op = 'updateMany'; - _this15.dbg(op, mapper, records, opts); - return jsData.utils.resolve(_this15._updateMany(mapper, records, opts)); - }).then(function (results) { - var _results11 = slicedToArray(results, 2); - - var data = _results11[0]; - var result = _results11[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateMany'); - response.updated = data.length; - response = _this15.respond(response, opts); - - // afterUpdateMany lifecycle hook - op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(_this15[op](mapper, records, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - } - }); - var hasFetch = false; - try { - hasFetch = window && window.fetch; - } catch (e) {} - function isValidString(value) { - return value != null && value !== ''; - } - function join(items, separator) { - separator || (separator = ''); - return items.filter(isValidString).join(separator); - } - function makePath() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - function encode(val) { - return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); - } - function buildUrl(url, params) { - if (!params) { - return url; - } - var parts = []; - jsData.utils.forOwn(params, function (val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - if (!jsData.utils.isArray(val)) { - val = [val]; - } - val.forEach(function (v) { - if (toString.call(v) === '[object Date]') { - v = v.toISOString(); - } else if (jsData.utils.isObject(v)) { - v = jsData.utils.toJson(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - if (parts.length > 0) { - url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); - } - return url; - } - var DEFAULTS = { - /** - * Set a base path in order to use absolute URLs instead of relative URLs. - * - * @example - * const httpAdapter = new HttpAdapter({ - * basePath: 'https://mydomain.com' - * }); - * - * @name HttpAdapter#basePath - * @type {string} - * @since 3.0.0 - */ - basePath: '', - - /** - * Ensure that the request url has a trailing forward slash. - * - * @name HttpAdapter#forceTrailingSlash - * @type {boolean} - * @default false - * @since 3.0.0 - */ - forceTrailingSlash: false, - - /** - * The HTTP function that actually makes the HTTP request. By default this is - * `axios`. - * - * @name HttpAdapter#http - * @type {function} - * @since 3.0.0 - * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library - */ - http: axios$1, - - /** - * Default configuration options to be mixed into the `config` argument passed - * to {@link HttpAdapter#http}. - * - * @name HttpAdapter#httpConfig - * @type {object} - * @since 3.0.0 - */ - httpConfig: {}, - - /** - * Add a suffix to the request url, e.g. ".json". - * - * @name HttpAdapter#suffix - * @type {string} - * @since 3.0.0 - */ - suffix: '', - - /** - * Use `window.fetch` if available. - * - * @name HttpAdapter#useFetch - * @type {boolean} - * @default false - * @since 3.0.0 - * @see http://www.js-data.io/docs/js-data-http#using-windowfetch - */ - useFetch: false - }; - /** - * HttpAdapter class. - * - * @example - * import { DataStore } from 'js-data'; - * import { HttpAdapter } from 'js-data-http'; - * - * const httpAdapter = new HttpAdapter(); - * const store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * - * store.defineMapper('school'); - * store.defineMapper('student'); - * - * // GET /school/1 - * store.find('school', 1).then((school) => { - * console.log('school'); - * }); - * - * @class HttpAdapter - * @extends Adapter - * @param {object} [opts] Configuration options. - * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. - * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. - * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. - * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. - * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. - * @see http://www.js-data.io/docs/js-data-http - */ - function HttpAdapter(opts) { - jsData.utils.classCallCheck(this, HttpAdapter); +var defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } - opts || (opts = {}); - // Fill in any missing options with the defaults - jsData.utils.fillIn(opts, DEFAULTS); - Adapter.call(this, opts); - } + return obj; +}; - /** - * @name module:js-data-http.HttpAdapter - * @see HttpAdapter - */ - Adapter.extend({ - constructor: HttpAdapter, - - /** - * @name HttpAdapter#afterDEL - * @method - * @param {string} url - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterDEL: noop2, - - /** - * @name HttpAdapter#afterGET - * @method - * @param {string} url - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterGET: noop2, - - /** - * @name HttpAdapter#afterHTTP - * @method - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterHTTP: noop2, - - /** - * @name HttpAdapter#afterPOST - * @method - * @param {string} url - * @param {object} data - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterPOST: noop2, - - /** - * @name HttpAdapter#afterPUT - * @method - * @param {string} url - * @param {object} data - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterPUT: noop2, - - /** - * @name HttpAdapter#beforeDEL - * @method - * @param {object} url - * @param {object} config - * @param {object} opts - */ - beforeDEL: noop, - - /** - * @name HttpAdapter#beforeGET - * @method - * @param {object} url - * @param {object} config - * @param {object} opts - */ - beforeGET: noop, - - /** - * @name HttpAdapter#beforeHTTP - * @method - * @param {object} config - * @param {object} opts - */ - beforeHTTP: noop, - - /** - * @name HttpAdapter#beforePOST - * @method - * @param {object} url - * @param {object} data - * @param {object} config - * @param {object} opts - */ - beforePOST: noop, - - /** - * @name HttpAdapter#beforePUT - * @method - * @param {object} url - * @param {object} data - * @param {object} config - * @param {object} opts - */ - beforePUT: noop, - - _count: function _count(mapper, query, opts) { - var _this = this; - - return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return _this._end(mapper, opts, response); - }); - }, - _create: function _create(mapper, props, opts) { - var _this2 = this; - return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this2._end(mapper, opts, response); - }); - }, - _createMany: function _createMany(mapper, props, opts) { - var _this3 = this; - return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this3._end(mapper, opts, response); - }); - }, - _destroy: function _destroy(mapper, id, opts) { - var _this4 = this; - return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return _this4._end(mapper, opts, response); - }); - }, - _destroyAll: function _destroyAll(mapper, query, opts) { - var _this5 = this; - return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return _this5._end(mapper, opts, response); - }); - }, - _end: function _end(mapper, opts, response) { - return [this.deserialize(mapper, response, opts), response]; - }, - _find: function _find(mapper, id, opts) { - var _this6 = this; - - return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { - return _this6._end(mapper, opts, response); - }); - }, - _findAll: function _findAll(mapper, query, opts) { - var _this7 = this; - return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return _this7._end(mapper, opts, response); - }); - }, - _sum: function _sum(mapper, field, query, opts) { - var _this8 = this; - return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return _this8._end(mapper, opts, response); - }); - }, - _update: function _update(mapper, id, props, opts) { - var _this9 = this; - return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this9._end(mapper, opts, response); - }); - }, - _updateAll: function _updateAll(mapper, props, query, opts) { - var _this10 = this; - return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this10._end(mapper, opts, response); - }); - }, - _updateMany: function _updateMany(mapper, records, opts) { - var _this11 = this; - return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { - return _this11._end(mapper, opts, response); - }); - }, - - - /** - * Retrieve the number of records that match the selection `query`. - * - * @name HttpAdapter#count - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params.count = true; - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.count.call(this, mapper, query, opts); - }, - - - /** - * Create a new the record from the provided `props`. - * - * @name HttpAdapter#create - * @method - * @param {object} mapper The mapper. - * @param {object} props Properties to send as the payload. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.create.call(this, mapper, props, opts); - }, - - - /** - * Create multiple new records in batch. - * - * @name HttpAdapter#createMany - * @method - * @param {object} mapper The mapper. - * @param {array} props Array of property objects to send as the payload. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.createMany.call(this, mapper, props, opts); - }, - - - /** - * Make an Http request to `url` according to the configuration in `config`. - * - * @name HttpAdapter#DEL - * @method - * @param {string} url Url for the request. - * @param {object} [config] Http configuration that will be passed to - * {@link HttpAdapter#HTTP}. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - DEL: function DEL(url, config, opts) { - var _this12 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'delete'; - - // beforeDEL lifecycle hook - op = opts.op = 'beforeDEL'; - return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'DEL'; - _this12.dbg(op, url, config, opts); - return _this12.HTTP(config, opts); - }).then(function (response) { - // afterDEL lifecycle hook - op = opts.op = 'afterDEL'; - return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Transform the server response object into the payload that will be returned - * to JSData. - * - * @name HttpAdapter#deserialize - * @method - * @param {object} mapper The mapper used for the operation. - * @param {object} response Response object from {@link HttpAdapter#HTTP}. - * @param {object} opts Configuration options. - * @return {(object|array)} Deserialized data. - */ - deserialize: function deserialize(mapper, response, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.deserialize)) { - return opts.deserialize(mapper, response, opts); - } - if (jsData.utils.isFunction(mapper.deserialize)) { - return mapper.deserialize(mapper, response, opts); - } - if (response && response.hasOwnProperty('data')) { - return response.data; - } - return response; - }, - - - /** - * Destroy the record with the given primary key. - * - * @name HttpAdapter#destroy - * @method - * @param {object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.destroy.call(this, mapper, id, opts); - }, - - - /** - * Destroy the records that match the selection `query`. - * - * @name HttpAdapter#destroyAll - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.destroyAll.call(this, mapper, query, opts); - }, - - - /** - * Log an error. - * - * @name HttpAdapter#error - * @method - * @param {...*} [args] Arguments to log. - */ - error: function error() { - if (console) { - var _console; - - (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); - } - }, - - - /** - * Make an Http request using `window.fetch`. - * - * @name HttpAdapter#fetch - * @method - * @param {object} config Request configuration. - * @param {object} config.data Payload for the request. - * @param {string} config.method Http method for the request. - * @param {object} config.headers Headers for the request. - * @param {object} config.params Querystring for the request. - * @param {string} config.url Url for the request. - */ - fetch: function (_fetch) { - function fetch(_x) { - return _fetch.apply(this, arguments); - } - fetch.toString = function () { - return _fetch.toString(); - }; - return fetch; - }(function (config) { - var requestConfig = { - method: config.method, - // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers || {}) - }; - if (config.data) { - requestConfig.body = jsData.utils.toJson(config.data); - } - return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { - response.config = { - method: config.method, - url: config.url - }; - return response.json().then(function (data) { - response.data = data; - return response; - }); - }); - }), - - - /** - * Retrieve the record with the given primary key. - * - * @name HttpAdapter#find - * @method - * @param {object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.find.call(this, mapper, id, opts); - }, - - - /** - * Retrieve the records that match the selection `query`. - * - * @name HttpAdapter#findAll - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.findAll.call(this, mapper, query, opts); - }, - - - /** - * Make a GET request. - * - * @name HttpAdapter#GET - * @method - * @param {string} url The url for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - GET: function GET(url, config, opts) { - var _this13 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'get'; - - // beforeGET lifecycle hook - op = opts.op = 'beforeGET'; - return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'GET'; - _this13.dbg(op, url, config, opts); - return _this13.HTTP(config, opts); - }).then(function (response) { - // afterGET lifecycle hook - op = opts.op = 'afterGET'; - return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * @name HttpAdapter#getEndpoint - * @method - * @param {object} mapper The Mapper. - * @param {*} id The primary key, if any. - * @param {boolean} opts Configuration options. - * @return {string} Full path. - */ - getEndpoint: function getEndpoint(mapper, id, opts) { - var _this14 = this; - - opts || (opts = {}); - opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; - var relationList = mapper.relationList || []; - var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; - - relationList.forEach(function (def) { - if (def.type !== 'belongsTo' || !def.parent) { - return; - } - var item = void 0; - var parentKey = def.foreignKey; - var parentDef = def.getRelation(); - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete opts.params[parentKey]; - } - return false; - } else { - delete opts.params[parentKey]; - if (jsData.utils.isObject(id)) { - item = id; - } - if (item) { - parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); - } - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - jsData.utils._(_opts, parentDef); - endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - } - }); - return endpoint; - }, - - - /** - * @name HttpAdapter#getPath - * @method - * @param {string} method The method being executed. - * @param {object} mapper The Mapper. - * @param {(string|number)?} id The primary key, if any. - * @param {object} opts Configuration options. - */ - getPath: function getPath(method, mapper, id, opts) { - opts || (opts = {}); - var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(jsData.utils, args); - }, - getParams: function getParams(opts) { - opts || (opts = {}); - if (opts.params === undefined) { - return {}; - } - return jsData.utils.copy(opts.params); - }, - getSuffix: function getSuffix(mapper, opts) { - opts || (opts = {}); - if (opts.suffix === undefined) { - if (mapper.suffix === undefined) { - return this.suffix; - } - return mapper.suffix; - } - return opts.suffix; - }, - - - /** - * Make an Http request. - * - * @name HttpAdapter#HTTP - * @method - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - HTTP: function HTTP(config, opts) { - var _this15 = this; - - var start = new Date(); - opts || (opts = {}); - var payload = config.data; - var cache = config.cache; - var timeout = config.timeout; - config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = jsData.utils.deepMixIn(config, this.httpConfig); - config.data = payload; - config.cache = cache; - config.timeout = timeout; - if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || this.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } - var logResponse = function logResponse(data) { - var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (_this15.log) { - _this15.dbg(str, data); - } - return data; - } else { - if (_this15.error) { - _this15.error('\'FAILED: ' + str, data); - } - return jsData.utils.reject(data); - } - }; - if (!this.http) { - throw new Error('You have not configured this adapter with an http library!'); - } +var slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; - return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { - config = _config || config; - if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { - return _this15.fetch(config, opts).then(logResponse, logResponse); - } - return _this15.http(config).then(logResponse, logResponse).catch(function (err) { - return _this15.responseError(err, config, opts); - }); - }).then(function (response) { - return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Make a POST request. - * - * @name HttpAdapter#POST - * @method - * @param {*} url The url for the request. - * @param {object} data Payload for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - POST: function POST(url, data, config, opts) { - var _this16 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'post'; - - // beforePOST lifecycle hook - op = opts.op = 'beforePOST'; - return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'POST'; - _this16.dbg(op, url, data, config, opts); - return _this16.HTTP(config, opts); - }).then(function (response) { - // afterPOST lifecycle hook - op = opts.op = 'afterPOST'; - return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Make a PUT request. - * - * @name HttpAdapter#PUT - * @method - * @param {*} url The url for the request. - * @param {object} data Payload for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - PUT: function PUT(url, data, config, opts) { - var _this17 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'put'; - - // beforePUT lifecycle hook - op = opts.op = 'beforePUT'; - return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'PUT'; - _this17.dbg(op, url, data, config, opts); - return _this17.HTTP(config, opts); - }).then(function (response) { - // afterPUT lifecycle hook - op = opts.op = 'afterPUT'; - return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Transform the querystring object before it is serialized. This doesn't do - * anything by default. - * - * @name HttpAdapter#queryTransform - * @method - * @param {object} mapper The Mapper that triggered the request. - * @param {*} params The querystring object. - * @param {*} opts Configuration options - * @return {*} Transformed params. - */ - queryTransform: function queryTransform(mapper, params, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.queryTransform)) { - return opts.queryTransform(mapper, params, opts); - } - if (jsData.utils.isFunction(mapper.queryTransform)) { - return mapper.queryTransform(mapper, params, opts); - } - return params; - }, - - - /** - * Error handler invoked when the promise returned by {@link HttpAdapter#http} - * is rejected. Default implementation is to just return the error wrapped in - * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is - * called by {@link HttpAdapter#HTTP}. - * - * @name HttpAdapter#responseError - * @method - * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. - * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. - * @return {Promise} - */ - responseError: function responseError(err, config, opts) { - return jsData.utils.reject(err); - }, - - - /** - * Serialize request data. This doesn't do anything by default. - * - * @name HttpAdapter#serialize - * @method - * @param {object} mapper The Mapper that triggered the request. - * @param {object} data The request payload. - * @param {*} opts Configuration options. - * @return {*} Serialized data. - */ - serialize: function serialize(mapper, data, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.serialize)) { - return opts.serialize(mapper, data, opts); - } - if (jsData.utils.isFunction(mapper.serialize)) { - return mapper.serialize(mapper, data, opts); - } - return data; - }, - - - /** - * Retrieve the sum of the field of the records that match the selection query. - * - * @name HttpAdapter#sum - * @method - * @param {object} mapper The mapper. - * @param {string} field The field to sum. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - query || (query = {}); - opts || (opts = {}); - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); - } - opts.params = this.getParams(opts); - opts.params.sum = field; - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.sum.call(this, mapper, field, query, opts); - }, - - - /** - * Perform an update. Makes a PUT request by default. - * - * @name HttpAdapter#update - * @method - * @param {object} mapper The Mapper for the request. - * @param {*} id The primary key of the record being updated. - * @param {*} props The update payload. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.update.call(this, mapper, id, props, opts); - }, - - - /** - * Perform an update against records that match the selection query. Makes a - * PUT request by default. - * - * @name HttpAdapter#updateAll - * @method - * @param {object} mapper The Mapper for the request. - * @param {object} props The update payload. - * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); - }, - - - /** - * Update multiple individual records in a batch. - * - * @name HttpAdapter#updateMany - * @method - * @param {object} mapper The Mapper for the request. - * @param {array} records Array of property objects to send as the payload. - * Each must contain the primary key of the record to be updated. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.updateMany.call(this, mapper, records, opts); - } - }); + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); - /** - * Add an Http actions to a mapper. - * - * @example - * // CommonJS - * var JSData = require('js-data'); - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore; - * - * var JSDataHttp = require('js-data-http'); - * var HttpAdapter = JSDataHttp.HttpAdapter; - * var addAction = JSDataHttp.addAction; - * - * var httpAdapter = new HttpAdapter(); - * var store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * store.defineMapper('school'); - * - * // GET /reports/schools/:school_id/teachers - * addAction('getTeacherReports', { - * endpoint: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * })(store.getMapper('school')); - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then((response) => { - * // ... - * }); - * - * @name module:js-data-http.addAction - * @method - * @param {string} name Name of the new action. - * @param {object} [opts] Action configuration - * @param {string} [opts.adapter="http"] The name of the adapter to use. - * @param {string} [opts.pathname] Set the action's pathname. - * @param {function} [opts.request] Specify a request handler to be executed - * before the request is made. - * @param {function} [opts.response] Specify a response handler to be executed - * after the response is received. - * @param {function} [opts.responseError] Specify an error handler to be - * executed on error. - * @return {function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - function addAction(name, opts) { - if (!name || !jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); - } - return function (mapper) { - if (mapper[name]) { - throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); - } - opts.request = opts.request || function (config) { - return config; - }; - opts.response = opts.response || function (response) { - return response; - }; - opts.responseError = opts.responseError || function (err) { - return jsData.utils.reject(err); - }; - mapper[name] = function (id, _opts) { - var _this18 = this; + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } - _opts = _opts || {}; - if (jsData.utils.isObject(id)) { - _opts = id; - } - jsData.utils.fillIn(_opts, opts); - var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); - var config = {}; - config.mapper = this.name; - jsData.utils.deepMixIn(config, _opts); - config.method = config.method || 'GET'; - if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(this, _opts); - } else { - var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; - if (jsData.utils.isSorN(id)) { - args.push(id); - } - args.push(opts.pathname || name); - config.url = makePath.apply(null, args); - } - return jsData.utils.resolve(config).then(_opts.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.mapper = _this18.name; - } - return data; - }).then(_opts.response, _opts.responseError); - }; - return mapper; - }; - } + return _arr; + } - /** - * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for - * action configuration options. - * - * @example - * // CommonJS - * var JSData = require('js-data'); - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore; - * - * var JSDataHttp = require('js-data-http'); - * var HttpAdapter = JSDataHttp.HttpAdapter; - * var addActions = JSDataHttp.addActions; - * - * var httpAdapter = new HttpAdapter(); - * var store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * store.defineMapper('school'); - * - * addActions({ - * // GET /reports/schools/:school_id/teachers - * getTeacherReports: { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * } - * })(store.getMapper('school')); - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then((response) => { - * // ... - * }); - * - * @name module:js-data-http.addActions - * @method - * @param {object.} opts Object where the key is an action name - * and the value is the configuration for the action. - * @return {function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - function addActions(opts) { - opts || (opts = {}); - return function (mapper) { - jsData.utils.forOwn(opts, function (value, key) { - addAction(key, value)(mapper); - }); - return mapper; - }; - } + return function (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"); + } + }; +}(); - /** - * Details of the current version of the `js-data-http` module. - * - * @name module:js-data-http.version - * @type {object} - * @property {string} version.full The full semver value. - * @property {number} version.major The major version number. - * @property {number} version.minor The minor version number. - * @property {number} version.patch The patch version number. - * @property {(string|boolean)} version.alpha The alpha version value, - * otherwise `false` if the current version is not alpha. - * @property {(string|boolean)} version.beta The beta version value, - * otherwise `false` if the current version is not beta. - */ - var version = { - full: '3.0.0-rc.3', +var noop = function noop() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = args[args.length - 1]; + this.dbg.apply(this, [opts.op].concat(args)); + return jsData.utils.resolve(); +}; + +var noop2 = function noop2() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var opts = args[args.length - 2]; + this.dbg.apply(this, [opts.op].concat(args)); + return jsData.utils.resolve(); +}; + +var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; +}; + +var withoutRelations = function withoutRelations(mapper, props, opts) { + opts || (opts = {}); + opts.with || (opts.with = []); + var relationFields = mapper.relationFields || []; + var toStrip = relationFields.filter(function (value) { + return opts.with.indexOf(value) === -1; + }); + return jsData.utils.omit(props, toStrip); +}; + + + +/** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ +function Response(data, meta, op) { + meta || (meta = {}); + + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + this.data = data; + + jsData.utils.fillIn(this, meta); + + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + this.op = op; +} + +var DEFAULTS$1 = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, + + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false + + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @extends Component + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ +};function Adapter(opts) { + jsData.utils.classCallCheck(this, Adapter); + jsData.Component.call(this, opts); + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS$1); + jsData.utils.fillIn(this, opts); +} + +jsData.Component.extend({ + constructor: Adapter, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var _this = this; + + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + _this.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this._count(mapper, query, opts)); + }).then(function (results) { + var _results = slicedToArray(results, 2), + data = _results[0], + result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = _this.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var _this2 = this; + + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'create'; + _this2.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this2._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = slicedToArray(results, 2), + data = _results2[0], + result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = _this2.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var _this3 = this; + + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record, opts); + }); + op = opts.op = 'createMany'; + _this3.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = slicedToArray(results, 2), + data = _results3[0], + result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = _this3.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var _this4 = this; + + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + _this4.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = slicedToArray(results, 2), + data = _results4[0], + result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = _this4.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var _this5 = this; + + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + _this5.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = slicedToArray(results, 2), + data = _results5[0], + result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = _this5.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var _this6 = this; + + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var record = records; + return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }); + } else { + var keys = records.map(function (record) { + return _this6.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return this.findAll(relationDef, { + where: defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var _this7 = this; + + var op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + _this7.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this7._find(mapper, id, opts)); + }).then(function (results) { + return _this7.loadRelationsFor(mapper, results, opts); + }).then(function (_ref) { + var _ref2 = slicedToArray(_ref, 2), + record = _ref2[0], + meta = _ref2[1]; + + var response = new Response(record, meta, 'find'); + response.found = record ? 1 : 0; + response = _this7.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var _this8 = this; + + var op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + _this8.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); + }).then(function (results) { + return _this8.loadRelationsFor(mapper, results, opts); + }).then(function (_ref3) { + var _ref4 = slicedToArray(_ref3, 2), + records = _ref4[0], + meta = _ref4[1]; + + var response = new Response(records, meta, 'findAll'); + response.found = records.length; + response = _this8.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + loadRelationsFor: function loadRelationsFor(mapper, results, opts) { + var _this9 = this; + + var _results6 = slicedToArray(results, 1), + records = _results6[0]; + + var tasks = []; + + if (records) { + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = _this9.loadHasOne(mapper, def, records, __opts); + } else { + task = _this9.loadHasMany(mapper, def, records, __opts); + } + } else if (def.type === 'hasMany' && def.localKeys) { + task = _this9.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = _this9.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = _this9.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + } + + return jsData.utils.Promise.all(tasks).then(function () { + return results; + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var _this10 = this; + + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return _this10.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var _this11 = this; + + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': this.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(_this11.makeHasManyLocalKeys(mapper, def, record)); + }); + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }); + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var _this12 = this; + + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return this.findAll(def.getRelation(), { + where: defineProperty({}, def.foreignKeys, { + 'contains': this.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return this.findAll(relatedMapper, { + where: defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return _this12.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); + } + }); + }); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var _this13 = this; + + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + _this13.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(_this13._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results7 = slicedToArray(results, 2), + data = _results7[0], + result = _results7[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = _this13.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(_this13[op](mapper, field, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var _this14 = this; + + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'update'; + _this14.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(_this14._update(mapper, id, props, opts)); + }).then(function (results) { + var _results8 = slicedToArray(results, 2), + data = _results8[0], + result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = _this14.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(_this14[op](mapper, id, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var _this15 = this; + + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'updateAll'; + _this15.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(_this15._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results9 = slicedToArray(results, 2), + data = _results9[0], + result = _results9[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = _this15.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(_this15[op](mapper, props, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var _this16 = this; + + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = _records === undefined ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record, opts); + }); + op = opts.op = 'updateMany'; + _this16.dbg(op, mapper, records, opts); + return jsData.utils.resolve(_this16._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results10 = slicedToArray(results, 2), + data = _results10[0], + result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = _this16.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(_this16[op](mapper, records, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + } +}); + +/** + * Create a subclass of this Adapter: + * + * @example Adapter.extend + * // Normally you would do: import {Adapter} from 'js-data' + * const JSData = require('js-data@3.0.0-beta.10') + * const {Adapter} = JSData + * console.log('Using JSData v' + JSData.version.full) + * + * // Extend the class using ES2015 class syntax. + * class CustomAdapterClass extends Adapter { + * foo () { return 'bar' } + * static beep () { return 'boop' } + * } + * const customAdapter = new CustomAdapterClass() + * console.log(customAdapter.foo()) + * console.log(CustomAdapterClass.beep()) + * + * // Extend the class using alternate method. + * const OtherAdapterClass = Adapter.extend({ + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const otherAdapter = new OtherAdapterClass() + * console.log(otherAdapter.foo()) + * console.log(OtherAdapterClass.beep()) + * + * // Extend the class, providing a custom constructor. + * function AnotherAdapterClass () { + * Adapter.call(this) + * this.created_at = new Date().getTime() + * } + * Adapter.extend({ + * constructor: AnotherAdapterClass, + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const anotherAdapter = new AnotherAdapterClass() + * console.log(anotherAdapter.created_at) + * console.log(anotherAdapter.foo()) + * console.log(AnotherAdapterClass.beep()) + * + * @method Adapter.extend + * @param {Object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {Object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {Object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this Adapter class. + */ + +var hasFetch = false; + +try { + hasFetch = window && window.fetch; +} catch (e) {} + +function isValidString(value) { + return value != null && value !== ''; +} +function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); +} +function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:/]|^)\/{2,}/g, '$1/'); +} + +function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); +} + +function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (jsData.utils.isObject(v)) { + v = jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; +} + +var DEFAULTS = { + /** + * Set a base path in order to use absolute URLs instead of relative URLs. + * + * @example + * const httpAdapter = new HttpAdapter({ + * basePath: 'https://mydomain.com' + * }); + * + * @name HttpAdapter#basePath + * @type {string} + * @since 3.0.0 + */ + basePath: '', + + /** + * Ensure that the request url has a trailing forward slash. + * + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + * @since 3.0.0 + */ + forceTrailingSlash: false, + + hasFetch: hasFetch, + + /** + * The HTTP function that actually makes the HTTP request. By default this is + * `axios`. + * + * @name HttpAdapter#http + * @type {function} + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library + */ + http: axios, + + /** + * Default configuration options to be mixed into the `config` argument passed + * to {@link HttpAdapter#http}. + * + * @name HttpAdapter#httpConfig + * @type {object} + * @since 3.0.0 + */ + httpConfig: {}, + + /** + * Add a suffix to the request url, e.g. ".json". + * + * @name HttpAdapter#suffix + * @type {string} + * @since 3.0.0 + */ + suffix: '', + + /** + * Use `window.fetch` if available. + * + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-windowfetch + */ + useFetch: false + + /** + * HttpAdapter class. + * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * + * @class HttpAdapter + * @extends Adapter + * @param {object} [opts] Configuration options. + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http + */ +};function HttpAdapter(opts) { + jsData.utils.classCallCheck(this, HttpAdapter); + + opts || (opts = {}); + // Fill in any missing options with the defaults + jsData.utils.fillIn(opts, DEFAULTS); + Adapter.call(this, opts); +} + +/** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + +Adapter.extend({ + constructor: HttpAdapter, + + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterDEL: noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterGET: noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterHTTP: noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterPOST: noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterPUT: noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {object} url + * @param {object} config + * @param {object} opts + */ + beforeDEL: noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {object} url + * @param {object} config + * @param {object} opts + */ + beforeGET: noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {object} config + * @param {object} opts + */ + beforeHTTP: noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts + */ + beforePOST: noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts + */ + beforePUT: noop, + + _count: function _count(mapper, query, opts) { + var _this = this; + + return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return _this._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var _this2 = this; + + return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this2._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var _this3 = this; + + return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this3._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var _this4 = this; + + return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return _this4._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var _this5 = this; + + return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return _this5._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var _this6 = this; + + return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { + return _this6._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var _this7 = this; + + return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return _this7._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var _this8 = this; + + return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return _this8._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var _this9 = this; + + return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this9._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var _this10 = this; + + return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this10._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var _this11 = this; + + return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { + return _this11._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params.count = true; + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.count.call(this, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {object} mapper The mapper. + * @param {object} props Properties to send as the payload. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.create.call(this, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {object} mapper The mapper. + * @param {array} props Array of property objects to send as the payload. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.createMany.call(this, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var _this12 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'DEL'; + _this12.dbg(op, url, config, opts); + return _this12.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {object} mapper The mapper used for the operation. + * @param {object} response Response object from {@link HttpAdapter#HTTP}. + * @param {object} opts Configuration options. + * @return {(object|array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroy.call(this, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroyAll.call(this, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {object} config Request configuration. + * @param {object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {object} config.headers Headers for the request. + * @param {object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + */ + fetch: function (_fetch) { + function fetch(_x) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers || {}) + }; + + if (config.data) { + requestConfig.body = jsData.utils.toJson(config.data); + } + + return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), + + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.find.call(this, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.findAll.call(this, mapper, query, opts); + }, + + + /** + * Make a GET request. + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var _this13 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'GET'; + _this13.dbg(op, url, config, opts); + return _this13.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {object} mapper The Mapper. + * @param {*} id The primary key, if any. + * @param {boolean} opts Configuration options. + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var _this14 = this; + + opts || (opts = {}); + opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; + } + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { + delete opts.params[parentKey]; + + if (jsData.utils.isObject(id)) { + item = id; + } + + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } + + if (parentId) { + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + jsData.utils._(_opts, parentDef); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return false; + } + } + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method The method being executed. + * @param {object} mapper The Mapper. + * @param {(string|number)?} id The primary key, if any. + * @param {object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + opts || (opts = {}); + var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (opts.params === undefined) { + return {}; + } + return jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (opts.suffix === undefined) { + if (mapper.suffix === undefined) { + return this.suffix; + } + return mapper.suffix; + } + return opts.suffix; + }, + + + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var _this15 = this; + + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = jsData.utils.deepMixIn(config, this.httpConfig); + config.data = payload; + config.cache = cache; + if (timeout !== undefined) { + config.timeout = timeout; + } + if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || this.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; + } + + var logResponse = function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (_this15.log) { + _this15.dbg(str, data); + } + return data; + } else { + if (_this15.error) { + _this15.error('\'FAILED: ' + str, data); + } + return jsData.utils.reject(data); + } + }; + + if (!this.http) { + if (this.useFetch || opts.useFetch) { + if (!hasFetch) { + throw new Error('Attempting to use window.fetch, but it is not available!'); + } + } else { + throw new Error('You have not configured this adapter with an http library!'); + } + } + + return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { + return _this15.fetch(config, opts).then(logResponse, logResponse); + } + var httpConfig = jsData.utils.plainCopy(config); + delete httpConfig.adapter; + return _this15.http(httpConfig).then(logResponse, logResponse).catch(function (err) { + return _this15.responseError(err, config, opts); + }); + }).then(function (response) { + return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Make a POST request. + * + * @name HttpAdapter#POST + * @method + * @param {*} url The url for the request. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var _this16 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'POST'; + _this16.dbg(op, url, data, config, opts); + return _this16.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Make a PUT request. + * + * @name HttpAdapter#PUT + * @method + * @param {*} url The url for the request. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var _this17 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'PUT'; + _this17.dbg(op, url, data, config, opts); + return _this17.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Transform the querystring object before it is serialized. This doesn't do + * anything by default. + * + * @name HttpAdapter#queryTransform + * @method + * @param {object} mapper The Mapper that triggered the request. + * @param {*} params The querystring object. + * @param {*} opts Configuration options + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. + * + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return jsData.utils.reject(err); + }, + + + /** + * Serialize request data. This doesn't do anything by default. + * + * @name HttpAdapter#serialize + * @method + * @param {object} mapper The Mapper that triggered the request. + * @param {object} data The request payload. + * @param {*} opts Configuration options. + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. + * + * @name HttpAdapter#sum + * @method + * @param {object} mapper The mapper. + * @param {string} field The field to sum. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + query || (query = {}); + opts || (opts = {}); + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = this.getParams(opts); + opts.params.sum = field; + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.sum.call(this, mapper, field, query, opts); + }, + + + /** + * Perform an update. Makes a PUT request by default. + * + * @name HttpAdapter#update + * @method + * @param {object} mapper The Mapper for the request. + * @param {*} id The primary key of the record being updated. + * @param {*} props The update payload. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.update.call(this, mapper, id, props, opts); + }, + + + /** + * Perform an update against records that match the selection query. Makes a + * PUT request by default. + * + * @name HttpAdapter#updateAll + * @method + * @param {object} mapper The Mapper for the request. + * @param {object} props The update payload. + * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); + }, + + + /** + * Update multiple individual records in a batch. + * + * @name HttpAdapter#updateMany + * @method + * @param {object} mapper The Mapper for the request. + * @param {array} records Array of property objects to send as the payload. + * Each must contain the primary key of the record to be updated. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateMany.call(this, mapper, records, opts); + } +}); + +/** + * Add an Http actions to a mapper. + * + * @example + * // CommonJS + * var JSData = require('js-data'); + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore; + * + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addAction = JSDataHttp.addAction; + * + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * endpoint: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')); + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then((response) => { + * // ... + * }); + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {object} [opts] Action configuration + * @param {string} [opts.adapter="http"] The name of the adapter to use. + * @param {string} [opts.pathname] Set the action's pathname. + * @param {function} [opts.request] Specify a request handler to be executed + * before the request is made. + * @param {function} [opts.response] Specify a response handler to be executed + * after the response is received. + * @param {function} [opts.responseError] Specify an error handler to be + * executed on error. + * @return {function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addAction(name, opts) { + if (!name || !jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var _this18 = this; + + _opts = _opts || {}; + if (jsData.utils.isObject(id)) { + _opts = id; + } + jsData.utils.fillIn(_opts, opts); + var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); + var config = {}; + config.mapper = this.name; + jsData.utils.deepMixIn(config, _opts); + config.method = config.method || 'GET'; + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(this, _opts); + } else { + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; + if (jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + return jsData.utils.resolve(config).then(_opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = _this18.name; + } + return data; + }).then(_opts.response, _opts.responseError); + }; + return mapper; + }; +} + +/** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @example + * // CommonJS + * var JSData = require('js-data'); + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore; + * + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addActions = JSDataHttp.addActions; + * + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')); + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then((response) => { + * // ... + * }); + * + * @name module:js-data-http.addActions + * @method + * @param {object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + jsData.utils.forOwn(opts, function (value, key) { + addAction(key, value)(mapper); + }); + return mapper; + }; +} + +/** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ +var version = { + full: '3.0.0', major: 3, minor: 0, patch: 0 }; - exports.HttpAdapter = HttpAdapter; - exports.addAction = addAction; - exports.addActions = addActions; - exports.version = version; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); +/** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example ES2015 Modules + * import { HttpAdapter } from 'js-data-Http'; + * const httpAdapter = new HttpAdapter(); + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * // ... + * }); + * + * @module js-data-http + */ + +/** + * Create a subclass of this HttpAdapter: + * @example HttpAdapter.extend + * // Normally you would do: import { HttpAdapter } from 'js-data-http'; + * // or: import { HttpAdapter } from 'js-data-http-node'; + * const JSDataHttp = require('js-data-http-node'); + * const { HttpAdapter } = JSDataHttp; + * console.log('Using JSDataHttp v' + JSDataHttp.version.full); + * + * // Extend the class using ES2015 class syntax. + * class CustomHttpAdapterClass extends HttpAdapter { + * foo () { return 'bar'; } + * static beep () { return 'boop'; } + * } + * const customHttpAdapter = new CustomHttpAdapterClass(); + * console.log(customHttpAdapter.foo()); + * console.log(CustomHttpAdapterClass.beep()); + * + * // Extend the class using alternate method. + * const OtherHttpAdapterClass = HttpAdapter.extend({ + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const otherHttpAdapter = new OtherHttpAdapterClass(); + * console.log(otherHttpAdapter.foo()); + * console.log(OtherHttpAdapterClass.beep()); + * + * // Extend the class, providing a custom constructor. + * function AnotherHttpAdapterClass () { + * HttpAdapter.call(this); + * this.created_at = new Date().getTime(); + * } + * HttpAdapter.extend({ + * constructor: AnotherHttpAdapterClass, + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const anotherHttpAdapter = new AnotherHttpAdapterClass(); + * console.log(anotherHttpAdapter.created_at); + * console.log(anotherHttpAdapter.foo()); + * console.log(AnotherHttpAdapterClass.beep()); + * + * @method HttpAdapter.extend + * @param {object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this HttpAdapter class. + * @since 3.0.0 + */ + +exports.HttpAdapter = HttpAdapter; +exports.addAction = addAction; +exports.addActions = addActions; +exports.version = version; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); //# sourceMappingURL=js-data-http.js.map diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 30360f8..efeaa60 100644 --- a/dist/js-data-http.js.map +++ b/dist/js-data-http.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.13.1 | (c) 2016 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(4);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = module.exports = createInstance();\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(defaultConfig) {\n\t return createInstance(defaultConfig);\n\t};\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(21);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(5);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(7);\n\tvar dispatchRequest = __webpack_require__(8);\n\tvar isAbsoluteURL = __webpack_require__(19);\n\tvar combineURLs = __webpack_require__(20);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t */\n\tfunction Axios(defaultConfig) {\n\t this.defaults = utils.merge(defaults, defaultConfig);\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(6);\n\t\n\tvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t data = data.replace(PROTECTION_PREFIX, '');\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t headers: {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t },\n\t patch: utils.merge(DEFAULT_CONTENT_TYPE),\n\t post: utils.merge(DEFAULT_CONTENT_TYPE),\n\t put: utils.merge(DEFAULT_CONTENT_TYPE)\n\t },\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(9);\n\t\n\t/**\n\t * Dispatch a request to the server using whichever adapter\n\t * is supported by the current environment.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter;\n\t\n\t if (typeof config.adapter === 'function') {\n\t // For custom adapter support\n\t adapter = config.adapter;\n\t } else if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(10);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(10);\n\t }\n\t\n\t return Promise.resolve(config)\n\t // Wrap synchronous adapter errors and pass configuration\n\t .then(adapter)\n\t .then(function onFulfilled(response) {\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onRejected(error) {\n\t // Transform response data\n\t if (error && error.response) {\n\t error.response.data = transformData(\n\t error.response.data,\n\t error.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t\n\t return Promise.reject(error);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(11);\n\tvar buildURL = __webpack_require__(14);\n\tvar parseHeaders = __webpack_require__(15);\n\tvar isURLSameOrigin = __webpack_require__(16);\n\tvar createError = __webpack_require__(12);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa) || __webpack_require__(17);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t if (request.status === 0) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(18);\n\t\n\t // Add xsrf header\n\t var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t if (request.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.progress === 'function') {\n\t if (config.method === 'post' || config.method === 'put') {\n\t request.upload.addEventListener('progress', config.progress);\n\t } else if (config.method === 'get') {\n\t request.addEventListener('progress', config.progress);\n\t }\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(12);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(13);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, response);\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t @ @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","DEFAULTS","Component","axios"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-http.js","sources":["../node_modules/axios/dist/axios.js","../node_modules/js-data-adapter/src/index.js","../src/index.js"],"sourcesContent":["/* axios v0.16.2 | (c) 2017 by Matt Zabriskie */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar bind = __webpack_require__(3);\n\tvar Axios = __webpack_require__(5);\n\tvar defaults = __webpack_require__(6);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t var context = new Axios(defaultConfig);\n\t var instance = bind(Axios.prototype.request, context);\n\t\n\t // Copy axios.prototype to instance\n\t utils.extend(instance, Axios.prototype, context);\n\t\n\t // Copy context to instance\n\t utils.extend(instance, context);\n\t\n\t return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = createInstance(defaults);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(instanceConfig) {\n\t return createInstance(utils.merge(defaults, instanceConfig));\n\t};\n\t\n\t// Expose Cancel & CancelToken\n\taxios.Cancel = __webpack_require__(23);\n\taxios.CancelToken = __webpack_require__(24);\n\taxios.isCancel = __webpack_require__(20);\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(25);\n\t\n\tmodule.exports = axios;\n\t\n\t// Allow use of default import syntax in TypeScript\n\tmodule.exports.default = axios;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(3);\n\tvar isBuffer = __webpack_require__(4);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * navigator.product -> 'ReactNative'\n\t */\n\tfunction isStandardBrowserEnv() {\n\t if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n\t return false;\n\t }\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isBuffer: isBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t return function wrap() {\n\t var args = new Array(arguments.length);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i];\n\t }\n\t return fn.apply(thisArg, args);\n\t };\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * Determine if an object is a Buffer\n\t *\n\t * @author Feross Aboukhadijeh \n\t * @license MIT\n\t */\n\t\n\t// The _isBuffer check is for Safari 5-7 support, because it's missing\n\t// Object.prototype.constructor. Remove this eventually\n\tmodule.exports = function (obj) {\n\t return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n\t}\n\t\n\tfunction isBuffer (obj) {\n\t return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n\t}\n\t\n\t// For Node v0.10 support. Remove this eventually.\n\tfunction isSlowBuffer (obj) {\n\t return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n\t}\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(6);\n\tvar utils = __webpack_require__(2);\n\tvar InterceptorManager = __webpack_require__(17);\n\tvar dispatchRequest = __webpack_require__(18);\n\tvar isAbsoluteURL = __webpack_require__(21);\n\tvar combineURLs = __webpack_require__(22);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} instanceConfig The default config for the instance\n\t */\n\tfunction Axios(instanceConfig) {\n\t this.defaults = instanceConfig;\n\t this.interceptors = {\n\t request: new InterceptorManager(),\n\t response: new InterceptorManager()\n\t };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t /*eslint no-param-reassign:0*/\n\t // Allow for axios('example/url'[, config]) a la fetch API\n\t if (typeof config === 'string') {\n\t config = utils.merge({\n\t url: arguments[0]\n\t }, arguments[1]);\n\t }\n\t\n\t config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\t config.method = config.method.toLowerCase();\n\t\n\t // Support baseURL config\n\t if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t config.url = combineURLs(config.baseURL, config.url);\n\t }\n\t\n\t // Hook up interceptors middleware\n\t var chain = [dispatchRequest, undefined];\n\t var promise = Promise.resolve(config);\n\t\n\t this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t chain.push(interceptor.fulfilled, interceptor.rejected);\n\t });\n\t\n\t while (chain.length) {\n\t promise = promise.then(chain.shift(), chain.shift());\n\t }\n\t\n\t return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url\n\t }));\n\t };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t /*eslint func-names:0*/\n\t Axios.prototype[method] = function(url, data, config) {\n\t return this.request(utils.merge(config || {}, {\n\t method: method,\n\t url: url,\n\t data: data\n\t }));\n\t };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar normalizeHeaderName = __webpack_require__(7);\n\t\n\tvar DEFAULT_CONTENT_TYPE = {\n\t 'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t headers['Content-Type'] = value;\n\t }\n\t}\n\t\n\tfunction getDefaultAdapter() {\n\t var adapter;\n\t if (typeof XMLHttpRequest !== 'undefined') {\n\t // For browsers use XHR adapter\n\t adapter = __webpack_require__(8);\n\t } else if (typeof process !== 'undefined') {\n\t // For node use HTTP adapter\n\t adapter = __webpack_require__(8);\n\t }\n\t return adapter;\n\t}\n\t\n\tvar defaults = {\n\t adapter: getDefaultAdapter(),\n\t\n\t transformRequest: [function transformRequest(data, headers) {\n\t normalizeHeaderName(headers, 'Content-Type');\n\t if (utils.isFormData(data) ||\n\t utils.isArrayBuffer(data) ||\n\t utils.isBuffer(data) ||\n\t utils.isStream(data) ||\n\t utils.isFile(data) ||\n\t utils.isBlob(data)\n\t ) {\n\t return data;\n\t }\n\t if (utils.isArrayBufferView(data)) {\n\t return data.buffer;\n\t }\n\t if (utils.isURLSearchParams(data)) {\n\t setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t return data.toString();\n\t }\n\t if (utils.isObject(data)) {\n\t setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t return JSON.stringify(data);\n\t }\n\t return data;\n\t }],\n\t\n\t transformResponse: [function transformResponse(data) {\n\t /*eslint no-param-reassign:0*/\n\t if (typeof data === 'string') {\n\t try {\n\t data = JSON.parse(data);\n\t } catch (e) { /* Ignore */ }\n\t }\n\t return data;\n\t }],\n\t\n\t timeout: 0,\n\t\n\t xsrfCookieName: 'XSRF-TOKEN',\n\t xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t maxContentLength: -1,\n\t\n\t validateStatus: function validateStatus(status) {\n\t return status >= 200 && status < 300;\n\t }\n\t};\n\t\n\tdefaults.headers = {\n\t common: {\n\t 'Accept': 'application/json, text/plain, */*'\n\t }\n\t};\n\t\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t defaults.headers[method] = {};\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n\t});\n\t\n\tmodule.exports = defaults;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t utils.forEach(headers, function processHeader(value, name) {\n\t if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t headers[normalizedName] = value;\n\t delete headers[name];\n\t }\n\t });\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar settle = __webpack_require__(9);\n\tvar buildURL = __webpack_require__(12);\n\tvar parseHeaders = __webpack_require__(13);\n\tvar isURLSameOrigin = __webpack_require__(14);\n\tvar createError = __webpack_require__(10);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(15);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t var requestData = config.data;\n\t var requestHeaders = config.headers;\n\t\n\t if (utils.isFormData(requestData)) {\n\t delete requestHeaders['Content-Type']; // Let the browser set it\n\t }\n\t\n\t var request = new XMLHttpRequest();\n\t var loadEvent = 'onreadystatechange';\n\t var xDomain = false;\n\t\n\t // For IE 8/9 CORS support\n\t // Only supports POST and GET calls and doesn't returns the response headers.\n\t // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t if ((\"production\") !== 'test' &&\n\t typeof window !== 'undefined' &&\n\t window.XDomainRequest && !('withCredentials' in request) &&\n\t !isURLSameOrigin(config.url)) {\n\t request = new window.XDomainRequest();\n\t loadEvent = 'onload';\n\t xDomain = true;\n\t request.onprogress = function handleProgress() {};\n\t request.ontimeout = function handleTimeout() {};\n\t }\n\t\n\t // HTTP basic authentication\n\t if (config.auth) {\n\t var username = config.auth.username || '';\n\t var password = config.auth.password || '';\n\t requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t }\n\t\n\t request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t // Set the request timeout in MS\n\t request.timeout = config.timeout;\n\t\n\t // Listen for ready state\n\t request[loadEvent] = function handleLoad() {\n\t if (!request || (request.readyState !== 4 && !xDomain)) {\n\t return;\n\t }\n\t\n\t // The request errored out and we didn't get a response, this will be\n\t // handled by onerror instead\n\t // With one exception: request that using file: protocol, most browsers\n\t // will return status as 0 even though it's a successful request\n\t if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n\t return;\n\t }\n\t\n\t // Prepare the response\n\t var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t var response = {\n\t data: responseData,\n\t // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n\t status: request.status === 1223 ? 204 : request.status,\n\t statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t headers: responseHeaders,\n\t config: config,\n\t request: request\n\t };\n\t\n\t settle(resolve, reject, response);\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle low level network errors\n\t request.onerror = function handleError() {\n\t // Real errors are hidden from us by the browser\n\t // onerror should only fire if it's a network error\n\t reject(createError('Network Error', config, null, request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Handle timeout\n\t request.ontimeout = function handleTimeout() {\n\t reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n\t request));\n\t\n\t // Clean up request\n\t request = null;\n\t };\n\t\n\t // Add xsrf header\n\t // This is only done if running in a standard browser environment.\n\t // Specifically not if we're in a web worker, or react-native.\n\t if (utils.isStandardBrowserEnv()) {\n\t var cookies = __webpack_require__(16);\n\t\n\t // Add xsrf header\n\t var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n\t cookies.read(config.xsrfCookieName) :\n\t undefined;\n\t\n\t if (xsrfValue) {\n\t requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t }\n\t }\n\t\n\t // Add headers to the request\n\t if ('setRequestHeader' in request) {\n\t utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t // Remove Content-Type if data is undefined\n\t delete requestHeaders[key];\n\t } else {\n\t // Otherwise add header to the request\n\t request.setRequestHeader(key, val);\n\t }\n\t });\n\t }\n\t\n\t // Add withCredentials to request if needed\n\t if (config.withCredentials) {\n\t request.withCredentials = true;\n\t }\n\t\n\t // Add responseType to request if needed\n\t if (config.responseType) {\n\t try {\n\t request.responseType = config.responseType;\n\t } catch (e) {\n\t // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n\t // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n\t if (config.responseType !== 'json') {\n\t throw e;\n\t }\n\t }\n\t }\n\t\n\t // Handle progress if needed\n\t if (typeof config.onDownloadProgress === 'function') {\n\t request.addEventListener('progress', config.onDownloadProgress);\n\t }\n\t\n\t // Not all browsers support upload events\n\t if (typeof config.onUploadProgress === 'function' && request.upload) {\n\t request.upload.addEventListener('progress', config.onUploadProgress);\n\t }\n\t\n\t if (config.cancelToken) {\n\t // Handle cancellation\n\t config.cancelToken.promise.then(function onCanceled(cancel) {\n\t if (!request) {\n\t return;\n\t }\n\t\n\t request.abort();\n\t reject(cancel);\n\t // Clean up request\n\t request = null;\n\t });\n\t }\n\t\n\t if (requestData === undefined) {\n\t requestData = null;\n\t }\n\t\n\t // Send the request\n\t request.send(requestData);\n\t });\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(10);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t var validateStatus = response.config.validateStatus;\n\t // Note: status is not exposed by XDomainRequest\n\t if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t resolve(response);\n\t } else {\n\t reject(createError(\n\t 'Request failed with status code ' + response.status,\n\t response.config,\n\t null,\n\t response.request,\n\t response\n\t ));\n\t }\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(11);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, request and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, request, response) {\n\t var error = new Error(message);\n\t return enhanceError(error, config, code, request, response);\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, request, response) {\n\t error.config = config;\n\t if (code) {\n\t error.code = code;\n\t }\n\t error.request = request;\n\t error.response = response;\n\t return error;\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction encode(val) {\n\t return encodeURIComponent(val).\n\t replace(/%40/gi, '@').\n\t replace(/%3A/gi, ':').\n\t replace(/%24/g, '$').\n\t replace(/%2C/gi, ',').\n\t replace(/%20/g, '+').\n\t replace(/%5B/gi, '[').\n\t replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t /*eslint no-param-reassign:0*/\n\t if (!params) {\n\t return url;\n\t }\n\t\n\t var serializedParams;\n\t if (paramsSerializer) {\n\t serializedParams = paramsSerializer(params);\n\t } else if (utils.isURLSearchParams(params)) {\n\t serializedParams = params.toString();\n\t } else {\n\t var parts = [];\n\t\n\t utils.forEach(params, function serialize(val, key) {\n\t if (val === null || typeof val === 'undefined') {\n\t return;\n\t }\n\t\n\t if (utils.isArray(val)) {\n\t key = key + '[]';\n\t }\n\t\n\t if (!utils.isArray(val)) {\n\t val = [val];\n\t }\n\t\n\t utils.forEach(val, function parseValue(v) {\n\t if (utils.isDate(v)) {\n\t v = v.toISOString();\n\t } else if (utils.isObject(v)) {\n\t v = JSON.stringify(v);\n\t }\n\t parts.push(encode(key) + '=' + encode(v));\n\t });\n\t });\n\t\n\t serializedParams = parts.join('&');\n\t }\n\t\n\t if (serializedParams) {\n\t url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t }\n\t\n\t return url;\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t var parsed = {};\n\t var key;\n\t var val;\n\t var i;\n\t\n\t if (!headers) { return parsed; }\n\t\n\t utils.forEach(headers.split('\\n'), function parser(line) {\n\t i = line.indexOf(':');\n\t key = utils.trim(line.substr(0, i)).toLowerCase();\n\t val = utils.trim(line.substr(i + 1));\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs have full support of the APIs needed to test\n\t // whether the request URL is of the same origin as current location.\n\t (function standardBrowserEnv() {\n\t var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t var urlParsingNode = document.createElement('a');\n\t var originURL;\n\t\n\t /**\n\t * Parse a URL to discover it's components\n\t *\n\t * @param {String} url The URL to be parsed\n\t * @returns {Object}\n\t */\n\t function resolveURL(url) {\n\t var href = url;\n\t\n\t if (msie) {\n\t // IE needs attribute set twice to normalize properties\n\t urlParsingNode.setAttribute('href', href);\n\t href = urlParsingNode.href;\n\t }\n\t\n\t urlParsingNode.setAttribute('href', href);\n\t\n\t // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t return {\n\t href: urlParsingNode.href,\n\t protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t host: urlParsingNode.host,\n\t search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t hostname: urlParsingNode.hostname,\n\t port: urlParsingNode.port,\n\t pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t urlParsingNode.pathname :\n\t '/' + urlParsingNode.pathname\n\t };\n\t }\n\t\n\t originURL = resolveURL(window.location.href);\n\t\n\t /**\n\t * Determine if a URL shares the same origin as the current location\n\t *\n\t * @param {String} requestURL The URL to test\n\t * @returns {boolean} True if URL shares the same origin, otherwise false\n\t */\n\t return function isURLSameOrigin(requestURL) {\n\t var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t return (parsed.protocol === originURL.protocol &&\n\t parsed.host === originURL.host);\n\t };\n\t })() :\n\t\n\t // Non standard browser envs (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return function isURLSameOrigin() {\n\t return true;\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t var str = String(input);\n\t var output = '';\n\t for (\n\t // initialize result and counter\n\t var block, charCode, idx = 0, map = chars;\n\t // if the next str index does not exist:\n\t // change the mapping table to \"=\"\n\t // check if d has no fractional digits\n\t str.charAt(idx | 0) || (map = '=', idx % 1);\n\t // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t ) {\n\t charCode = str.charCodeAt(idx += 3 / 4);\n\t if (charCode > 0xFF) {\n\t throw new E();\n\t }\n\t block = block << 8 | charCode;\n\t }\n\t return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tmodule.exports = (\n\t utils.isStandardBrowserEnv() ?\n\t\n\t // Standard browser envs support document.cookie\n\t (function standardBrowserEnv() {\n\t return {\n\t write: function write(name, value, expires, path, domain, secure) {\n\t var cookie = [];\n\t cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t if (utils.isNumber(expires)) {\n\t cookie.push('expires=' + new Date(expires).toGMTString());\n\t }\n\t\n\t if (utils.isString(path)) {\n\t cookie.push('path=' + path);\n\t }\n\t\n\t if (utils.isString(domain)) {\n\t cookie.push('domain=' + domain);\n\t }\n\t\n\t if (secure === true) {\n\t cookie.push('secure');\n\t }\n\t\n\t document.cookie = cookie.join('; ');\n\t },\n\t\n\t read: function read(name) {\n\t var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t return (match ? decodeURIComponent(match[3]) : null);\n\t },\n\t\n\t remove: function remove(name) {\n\t this.write(name, '', Date.now() - 86400000);\n\t }\n\t };\n\t })() :\n\t\n\t // Non standard browser env (web workers, react-native) lack needed support.\n\t (function nonStandardBrowserEnv() {\n\t return {\n\t write: function write() {},\n\t read: function read() { return null; },\n\t remove: function remove() {}\n\t };\n\t })()\n\t);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\tfunction InterceptorManager() {\n\t this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t this.handlers.push({\n\t fulfilled: fulfilled,\n\t rejected: rejected\n\t });\n\t return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t if (this.handlers[id]) {\n\t this.handlers[id] = null;\n\t }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t utils.forEach(this.handlers, function forEachHandler(h) {\n\t if (h !== null) {\n\t fn(h);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\tvar transformData = __webpack_require__(19);\n\tvar isCancel = __webpack_require__(20);\n\tvar defaults = __webpack_require__(6);\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tfunction throwIfCancellationRequested(config) {\n\t if (config.cancelToken) {\n\t config.cancelToken.throwIfRequested();\n\t }\n\t}\n\t\n\t/**\n\t * Dispatch a request to the server using the configured adapter.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Ensure headers exist\n\t config.headers = config.headers || {};\n\t\n\t // Transform request data\n\t config.data = transformData(\n\t config.data,\n\t config.headers,\n\t config.transformRequest\n\t );\n\t\n\t // Flatten headers\n\t config.headers = utils.merge(\n\t config.headers.common || {},\n\t config.headers[config.method] || {},\n\t config.headers || {}\n\t );\n\t\n\t utils.forEach(\n\t ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t function cleanHeaderConfig(method) {\n\t delete config.headers[method];\n\t }\n\t );\n\t\n\t var adapter = config.adapter || defaults.adapter;\n\t\n\t return adapter(config).then(function onAdapterResolution(response) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t response.data = transformData(\n\t response.data,\n\t response.headers,\n\t config.transformResponse\n\t );\n\t\n\t return response;\n\t }, function onAdapterRejection(reason) {\n\t if (!isCancel(reason)) {\n\t throwIfCancellationRequested(config);\n\t\n\t // Transform response data\n\t if (reason && reason.response) {\n\t reason.response.data = transformData(\n\t reason.response.data,\n\t reason.response.headers,\n\t config.transformResponse\n\t );\n\t }\n\t }\n\t\n\t return Promise.reject(reason);\n\t });\n\t};\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(2);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t /*eslint no-param-reassign:0*/\n\t utils.forEach(fns, function transform(fn) {\n\t data = fn(data, headers);\n\t });\n\t\n\t return data;\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function isCancel(value) {\n\t return !!(value && value.__CANCEL__);\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n\t // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t // by any combination of letters, digits, plus, period, or hyphen.\n\t return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t return relativeURL\n\t ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n\t : baseURL;\n\t};\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * A `Cancel` is an object that is thrown when an operation is canceled.\n\t *\n\t * @class\n\t * @param {string=} message The message.\n\t */\n\tfunction Cancel(message) {\n\t this.message = message;\n\t}\n\t\n\tCancel.prototype.toString = function toString() {\n\t return 'Cancel' + (this.message ? ': ' + this.message : '');\n\t};\n\t\n\tCancel.prototype.__CANCEL__ = true;\n\t\n\tmodule.exports = Cancel;\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Cancel = __webpack_require__(23);\n\t\n\t/**\n\t * A `CancelToken` is an object that can be used to request cancellation of an operation.\n\t *\n\t * @class\n\t * @param {Function} executor The executor function.\n\t */\n\tfunction CancelToken(executor) {\n\t if (typeof executor !== 'function') {\n\t throw new TypeError('executor must be a function.');\n\t }\n\t\n\t var resolvePromise;\n\t this.promise = new Promise(function promiseExecutor(resolve) {\n\t resolvePromise = resolve;\n\t });\n\t\n\t var token = this;\n\t executor(function cancel(message) {\n\t if (token.reason) {\n\t // Cancellation has already been requested\n\t return;\n\t }\n\t\n\t token.reason = new Cancel(message);\n\t resolvePromise(token.reason);\n\t });\n\t}\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n\t if (this.reason) {\n\t throw this.reason;\n\t }\n\t};\n\t\n\t/**\n\t * Returns an object that contains a new `CancelToken` and a function that, when called,\n\t * cancels the `CancelToken`.\n\t */\n\tCancelToken.source = function source() {\n\t var cancel;\n\t var token = new CancelToken(function executor(c) {\n\t cancel = c;\n\t });\n\t return {\n\t token: token,\n\t cancel: cancel\n\t };\n\t};\n\t\n\tmodule.exports = CancelToken;\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t * ```js\n\t * function f(x, y, z) {}\n\t * var args = [1, 2, 3];\n\t * f.apply(null, args);\n\t * ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t * ```js\n\t * spread(function(x, y, z) {})([1, 2, 3]);\n\t * ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t return function wrap(arr) {\n\t return callback.apply(null, arr);\n\t };\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=axios.map","import { Component, utils } from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => this.loadRelationsFor(mapper, results, opts))\n .then(([record, meta]) => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n let op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => this.loadRelationsFor(mapper, results, opts))\n .then(([records, meta]) => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n loadRelationsFor (mapper, results, opts) {\n const [records] = results\n const tasks = []\n\n if (records) {\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, records, __opts)\n } else {\n task = this.loadHasMany(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n }\n\n return utils.Promise.all(tasks)\n .then(() => results)\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n hasFetch: hasFetch,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n if (timeout !== undefined) {\n config.timeout = timeout\n }\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n if ((this.useFetch || opts.useFetch)) {\n if (!hasFetch) {\n throw new Error('Attempting to use window.fetch, but it is not available!')\n }\n } else {\n throw new Error('You have not configured this adapter with an http library!')\n }\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n const httpConfig = utils.plainCopy(config)\n delete httpConfig.adapter\n return this.http(httpConfig).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["this","utils","noop","args","opts","length","dbg","op","resolve","noop2","unique","array","seen","final","forEach","item","push","withoutRelations","mapper","props","with","relationFields","toStrip","filter","value","indexOf","omit","Response","data","meta","fillIn","DEFAULTS","Adapter","classCallCheck","call","Component","extend","query","then","_count","results","result","response","respond","_response","undefined","_props","_create","created","map","record","_createMany","id","_destroy","_destroyAll","def","records","__opts","relationDef","getRelation","isObject","isArray","find","makeBelongsToForeignKey","relatedItem","setLocalField","keys","key","findAll","idAttribute","relatedItems","foreignKey","_find","loadRelationsFor","found","activeWith","_activeWith","activeQuery","replace","deepFillIn","_findAll","tasks","forEachRelation","task","type","loadHasOne","loadHasMany","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadBelongsTo","Promise","all","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","where","attached","get","relatedMapper","makeHasManyLocalKeys","concat","x","itemKeys","Object","makeHasManyForeignKeys","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","field","isString","Error","_sum","getOpt","_update","updated","_updateAll","_records","_updateMany","hasFetch","window","fetch","e","isValidString","join","items","separator","makePath","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","v","toString","toISOString","toJson","axios","HttpAdapter","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","count","suffix","getSuffix","deepMixIn","queryTransform","prototype","create","createMany","config","method","_config","HTTP","isFunction","hasOwnProperty","destroy","destroyAll","console","error","requestConfig","Headers","headers","body","json","isUndefined","relationList","endpoint","name","parent","parentKey","parentDef","parentId","_opts","_","getEndpoint","basePath","isNumber","apply","copy","start","Date","payload","cache","timeout","httpConfig","forceTrailingSlash","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","reject","http","useFetch","beforeHTTP","adapter","catch","err","responseError","afterHTTP","sum","update","updateAll","updateMany","addAction","TypeError","request","getAdapter","defaultAdapter","isSorN","pathname","addActions","version"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js-data-http.min.js b/dist/js-data-http.min.js index 2ccdbc9..c506c23 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,10 @@ /*! * js-data-http -* @version 3.0.0-rc.3 - Homepage +* @version 3.0.0 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP (XHR) adapter for js-data in the browser. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}function i(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function o(t){e.utils.classCallCheck(this,o),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,E),e.utils.fillIn(this,t)}function a(t){return null!=t&&""!==t}function u(t,e){return e||(e=""),t.filter(a).join(e)}function s(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function c(t){e.utils.classCallCheck(this,c),t||(t={}),e.utils.fillIn(t,P),o.call(this,t)}function d(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":m(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;i=i||{},e.utils.isObject(r)&&(i=r),e.utils.fillIn(i,n);var a=this.getAdapter(i.adapter||this.defaultAdapter||"http"),u={};if(u.mapper=this.name,e.utils.deepMixIn(u,i),u.method=u.method||"GET","function"==typeof i.getEndpoint)u.url=i.getEndpoint(this,i);else{var f=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,r,i)];e.utils.isSorN(r)&&f.push(r),f.push(n.pathname||t),u.url=s.apply(null,f)}return e.utils.resolve(u).then(i.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response,i.responseError)},r}}function p(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){d(e,t)(n)}),n}}var h="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},y=r(function(t,e){!function(n,r){"object"==typeof e&&"object"==typeof t?t.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof e?e.axios=r():n.axios=r()}(h,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(2),o=n(3),a=n(4),u=t.exports=r();u.Axios=a,u.create=function(t){return r(t)},u.all=function(t){return Promise.all(t)},u.spread=n(21)},function(t,e,n){function r(t){return"[object Array]"===T.call(t)}function i(t){return"[object ArrayBuffer]"===T.call(t)}function o(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function s(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function l(t){return null!==t&&"object"==typeof t}function c(t){return"[object Date]"===T.call(t)}function d(t){return"[object File]"===T.call(t)}function p(t){return"[object Blob]"===T.call(t)}function h(t){return"[object Function]"===T.call(t)}function y(t){return l(t)&&h(t.pipe)}function v(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function b(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n=200&&t<300}}},function(t,e,n){var r=n(2);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){function r(){this.handlers=[]}var i=n(2);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){var r=n(2),i=n(9);t.exports=function(t){t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e;return"function"==typeof t.adapter?e=t.adapter:"undefined"!=typeof XMLHttpRequest?e=n(10):"undefined"!=typeof process&&(e=n(10)),Promise.resolve(t).then(e).then(function(e){return e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse)),Promise.reject(e)})}},function(t,e,n){var r=n(2);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){var r=n(2),i=n(11),o=n(14),a=n(15),u=n(16),s=n(12),f="undefined"!=typeof window&&window.btoa||n(17);t.exports=function(t){return new Promise(function(e,l){var c=t.data,d=t.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||u(t.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function(){},p.ontimeout=function(){}),t.auth){var v=t.auth.username||"",m=t.auth.password||"";d.Authorization="Basic "+f(v+":"+m)}if(p.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),p.timeout=t.timeout,p[h]=function(){if(p&&(4===p.readyState||y)&&0!==p.status){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r=t.responseType&&"text"!==t.responseType?p.response:p.responseText,o={data:r,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:t,request:p};i(e,l,o),p=null}},p.onerror=function(){l(s("Network Error",t)),p=null},p.ontimeout=function(){l(s("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED")),p=null},r.isStandardBrowserEnv()){var g=n(18),b=t.withCredentials||u(t.url)?g.read(t.xsrfCookieName):void 0;b&&(d[t.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete d[e]:p.setRequestHeader(e,t)}),t.withCredentials&&(p.withCredentials=!0),t.responseType)try{p.responseType=t.responseType}catch(t){if("json"!==p.responseType)throw t}"function"==typeof t.progress&&("post"===t.method||"put"===t.method?p.upload.addEventListener("progress",t.progress):"get"===t.method&&p.addEventListener("progress",t.progress)),void 0===c&&(c=null),p.send(c)})}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n)):t(n)}},function(t,e,n){var r=n(13);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e){t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var i=n(2);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(i.isArray(t)&&(e+="[]"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+"="+r(t))}))}),o=a.join("&")}return o&&(t+=(t.indexOf("?")===-1?"?":"&")+o),t}},function(t,e,n){var r=n(2);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split("\n"),function(t){i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+", "+n:n)}),o):o}},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute("href",e),e=i.href),i.setAttribute("href",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e){function n(){this.message="String contains an invalid character"}function r(t){for(var e,r,o=String(t),a="",u=0,s=i;o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&e>>8-u%1*8)){if(r=o.charCodeAt(u+=.75),r>255)throw new n;e=e<<8|r}return a}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",t.exports=r},function(t,e,n){var r=n(2);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),a===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e){t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e){t.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},function(t,e){t.exports=function(t){return function(e){return t.apply(null,e)}}}])})}),v=n(y),m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},g=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),w=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,S&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(f,f):r.http(t).then(f,f).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){ -return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),o.prototype.sum.call(this,t,n,r,i)},update:function(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),o.prototype.update.call(this,t,e,n,r)},updateAll:function(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),o.prototype.updateAll.call(this,t,n,r,i)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),o.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.3",major:3,minor:0,patch:0};t.HttpAdapter=c,t.addAction=d,t.addActions=p,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-http",["exports","js-data"],t):t(e.JSDataHttp=e.JSDataHttp||{},e.JSData)}(this,function(e,t){"use strict";function Response(e,n,r){n||(n={}),this.data=e,t.utils.fillIn(this,n),this.op=r}function Adapter(e){t.utils.classCallCheck(this,Adapter),t.Component.call(this,e),e||(e={}),t.utils.fillIn(e,l),t.utils.fillIn(this,e)}function isValidString(e){return null!=e&&""!==e}function join(e,t){return t||(t=""),e.filter(isValidString).join(t)}function makePath(){for(var e=arguments.length,t=Array(e),n=0;n0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function HttpAdapter(e){t.utils.classCallCheck(this,HttpAdapter),e||(e={}),t.utils.fillIn(e,d),Adapter.call(this,e)}function addAction(e,n){if(!e||!t.utils.isString(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+(void 0===e?"undefined":r(e)));return function(r){if(r[e])throw new Error("action(name[, opts]): "+e+" already exists on target!");return n.request=n.request||function(e){return e},n.response=n.response||function(e){return e},n.responseError=n.responseError||function(e){return t.utils.reject(e)},r[e]=function(r,o){var i=this;o=o||{},t.utils.isObject(r)&&(o=r),t.utils.fillIn(o,n);var a=this.getAdapter(o.adapter||this.defaultAdapter||"http"),s={};if(s.mapper=this.name,t.utils.deepMixIn(s,o),s.method=s.method||"GET","function"==typeof o.getEndpoint)s.url=o.getEndpoint(this,o);else{var u=[o.basePath||this.basePath||a.basePath,a.getEndpoint(this,r,o)];t.utils.isSorN(r)&&u.push(r),u.push(n.pathname||e),s.url=makePath.apply(null,u)}return t.utils.resolve(s).then(o.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=i.name),e}).then(o.response,o.responseError)},r}}"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n=function createCommonjsModule(e,t){return t={exports:{}},e(t,t.exports),t.exports}(function(e,t){!function webpackUniversalModuleDefinition(t,n){e.exports=n()}(0,function(){return function(e){function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}var t={};return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.p="",__webpack_require__(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){function createInstance(e){var t=new i(e),n=o(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var r=n(2),o=n(3),i=n(5),a=n(6),s=createInstance(a);s.Axios=i,s.create=function create(e){return createInstance(r.merge(a,e))},s.Cancel=n(23),s.CancelToken=n(24),s.isCancel=n(20),s.all=function all(e){return Promise.all(e)},s.spread=n(25),e.exports=s,e.exports.default=s},function(e,t,n){function isArray(e){return"[object Array]"===i.call(e)}function isObject(e){return null!==e&&"object"==typeof e}function isFunction(e){return"[object Function]"===i.call(e)}function forEach(e,t){if(null!==e&&void 0!==e)if("object"==typeof e||isArray(e)||(e=[e]),isArray(e))for(var n=0,r=e.length;n=200&&e<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],function forEachMethodNoData(e){a.headers[e]={}}),r.forEach(["post","put","patch"],function forEachMethodWithData(e){a.headers[e]=r.merge(i)}),e.exports=a},function(e,t,n){var r=n(2);e.exports=function normalizeHeaderName(e,t){r.forEach(e,function processHeader(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){var r=n(2),o=n(9),i=n(12),a=n(13),s=n(14),u=n(10),f="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(15);e.exports=function xhrAdapter(e){return new Promise(function dispatchXhrRequest(t,l){var c=e.data,d=e.headers;r.isFormData(c)&&delete d["Content-Type"];var p=new XMLHttpRequest,h="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in p||s(e.url)||(p=new window.XDomainRequest,h="onload",y=!0,p.onprogress=function handleProgress(){},p.ontimeout=function handleTimeout(){}),e.auth){var m=e.auth.username||"",v=e.auth.password||"";d.Authorization="Basic "+f(m+":"+v)}if(p.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p[h]=function handleLoad(){if(p&&(4===p.readyState||y)&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in p?a(p.getAllResponseHeaders()):null,r={data:e.responseType&&"text"!==e.responseType?p.response:p.responseText,status:1223===p.status?204:p.status,statusText:1223===p.status?"No Content":p.statusText,headers:n,config:e,request:p};o(t,l,r),p=null}},p.onerror=function handleError(){l(u("Network Error",e,null,p)),p=null},p.ontimeout=function handleTimeout(){l(u("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",p)),p=null},r.isStandardBrowserEnv()){var g=n(16),b=(e.withCredentials||s(e.url))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;b&&(d[e.xsrfHeaderName]=b)}if("setRequestHeader"in p&&r.forEach(d,function setRequestHeader(e,t){void 0===c&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),e.withCredentials&&(p.withCredentials=!0),e.responseType)try{p.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function onCanceled(e){p&&(p.abort(),l(e),p=null)}),void 0===c&&(c=null),p.send(c)})}},function(e,t,n){var r=n(10);e.exports=function settle(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){var r=n(11);e.exports=function createError(e,t,n,o,i){var a=new Error(e);return r(a,t,n,o,i)}},function(e,t){e.exports=function enhanceError(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e}},function(e,t,n){function encode(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var r=n(2);e.exports=function buildURL(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(r.isURLSearchParams(t))o=t.toString();else{var i=[];r.forEach(t,function serialize(e,t){null!==e&&void 0!==e&&(r.isArray(e)&&(t+="[]"),r.isArray(e)||(e=[e]),r.forEach(e,function parseValue(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(encode(t)+"="+encode(e))}))}),o=i.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){var r=n(2);e.exports=function parseHeaders(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function parser(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},function(e,t,n){var r=n(2);e.exports=r.isStandardBrowserEnv()?function standardBrowserEnv(){function resolveURL(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");return e=resolveURL(window.location.href),function isURLSameOrigin(t){var n=r.isString(t)?resolveURL(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function nonStandardBrowserEnv(){return function isURLSameOrigin(){return!0}}()},function(e,t){function E(){this.message="String contains an invalid character"}var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";E.prototype=new Error,E.prototype.code=5,E.prototype.name="InvalidCharacterError",e.exports=function btoa(e){for(var t,r,o=String(e),i="",a=0,s=n;o.charAt(0|a)||(s="=",a%1);i+=s.charAt(63&t>>8-a%1*8)){if((r=o.charCodeAt(a+=.75))>255)throw new E;t=t<<8|r}return i}},function(e,t,n){var r=n(2);e.exports=r.isStandardBrowserEnv()?function standardBrowserEnv(){return{write:function write(e,t,n,o,i,a){var s=[];s.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function read(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function remove(e){this.write(e,"",Date.now()-864e5)}}}():function nonStandardBrowserEnv(){return{write:function write(){},read:function read(){return null},remove:function remove(){}}}()},function(e,t,n){function InterceptorManager(){this.handlers=[]}var r=n(2);InterceptorManager.prototype.use=function use(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},InterceptorManager.prototype.eject=function eject(e){this.handlers[e]&&(this.handlers[e]=null)},InterceptorManager.prototype.forEach=function forEach(e){r.forEach(this.handlers,function forEachHandler(t){null!==t&&e(t)})},e.exports=InterceptorManager},function(e,t,n){function throwIfCancellationRequested(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var r=n(2),o=n(19),i=n(20),a=n(6);e.exports=function dispatchRequest(e){return throwIfCancellationRequested(e),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function cleanHeaderConfig(t){delete e.headers[t]}),(e.adapter||a.adapter)(e).then(function onAdapterResolution(t){return throwIfCancellationRequested(e),t.data=o(t.data,t.headers,e.transformResponse),t},function onAdapterRejection(t){return i(t)||(throwIfCancellationRequested(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){var r=n(2);e.exports=function transformData(e,t,n){return r.forEach(n,function transform(n){e=n(e,t)}),e}},function(e,t){e.exports=function isCancel(e){return!(!e||!e.__CANCEL__)}},function(e,t){e.exports=function isAbsoluteURL(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){e.exports=function combineURLs(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t){function Cancel(e){this.message=e}Cancel.prototype.toString=function toString(){return"Cancel"+(this.message?": "+this.message:"")},Cancel.prototype.__CANCEL__=!0,e.exports=Cancel},function(e,t,n){function CancelToken(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function promiseExecutor(e){t=e});var n=this;e(function cancel(e){n.reason||(n.reason=new r(e),t(n.reason))})}var r=n(23);CancelToken.prototype.throwIfRequested=function throwIfRequested(){if(this.reason)throw this.reason},CancelToken.source=function source(){var e;return{token:new CancelToken(function executor(t){e=t}),cancel:e}},e.exports=CancelToken},function(e,t){e.exports=function spread(e){return function wrap(t){return e.apply(null,t)}}}])})}),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},i=function(){function sliceIterator(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return sliceIterator(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function noop(){for(var e=arguments.length,n=Array(e),r=0;r=200&&n.status<300?(r.log&&r.dbg(i,n),n):(r.error&&r.error("'FAILED: "+i,n),t.utils.reject(n))};if(!this.http){if(!this.useFetch&&!n.useFetch)throw new Error("You have not configured this adapter with an http library!");if(!c)throw new Error("Attempting to use window.fetch, but it is not available!")}return t.utils.resolve(this.beforeHTTP(e,n)).then(function(o){if(e=o||e,c&&(r.useFetch||n.useFetch||!r.http))return r.fetch(e,n).then(f,f);var i=t.utils.plainCopy(e);return delete i.adapter,r.http(i).then(f,f).catch(function(t){return r.responseError(t,e,n)})}).then(function(o){return t.utils.resolve(r.afterHTTP(e,n,o)).then(function(e){return void 0===e?o:e})})},POST:function POST(e,n,r,o){var i=this,a=void 0;return r||(r={}),o||(o={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"post",a=o.op="beforePOST",t.utils.resolve(this[a](e,n,r,o)).then(function(t){return r=void 0===t?r:t,a=o.op="POST",i.dbg(a,e,n,r,o),i.HTTP(r,o)}).then(function(s){return a=o.op="afterPOST",t.utils.resolve(i[a](e,n,r,o,s)).then(function(e){return void 0===e?s:e})})},PUT:function PUT(e,n,r,o){var i=this,a=void 0;return r||(r={}),o||(o={}),r.url=e||r.url,r.data=n||r.data,r.method=r.method||"put",a=o.op="beforePUT",t.utils.resolve(this[a](e,n,r,o)).then(function(t){return r=void 0===t?r:t,a=o.op="PUT",i.dbg(a,e,n,r,o),i.HTTP(r,o)}).then(function(s){return a=o.op="afterPUT",t.utils.resolve(i[a](e,n,r,o,s)).then(function(e){return void 0===e?s:e})})},queryTransform:function queryTransform(e,n,r){return r||(r={}),t.utils.isFunction(r.queryTransform)?r.queryTransform(e,n,r):t.utils.isFunction(e.queryTransform)?e.queryTransform(e,n,r):n},responseError:function responseError(e,n,r){return t.utils.reject(e)},serialize:function serialize(e,n,r){return r||(r={}),t.utils.isFunction(r.serialize)?r.serialize(e,n,r):t.utils.isFunction(e.serialize)?e.serialize(e,n,r):n},sum:function sum(e,n,r,o){if(r||(r={}),o||(o={}),!t.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(e,o),t.utils.deepMixIn(o.params,r),o.params=this.queryTransform(e,o.params,o),Adapter.prototype.sum.call(this,e,n,r,o)},update:function update(e,t,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(e,r.params,r),r.suffix=this.getSuffix(e,r),Adapter.prototype.update.call(this,e,t,n,r)},updateAll:function updateAll(e,n,r,o){return r||(r={}),o||(o={}),o.params=this.getParams(o),t.utils.deepMixIn(o.params,r),o.params=this.queryTransform(e,o.params,o),o.suffix=this.getSuffix(e,o),Adapter.prototype.updateAll.call(this,e,n,r,o)},updateMany:function updateMany(e,t,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(e,n.params,n),n.suffix=this.getSuffix(e,n),Adapter.prototype.updateMany.call(this,e,t,n)}});var p={full:"3.0.0",major:3,minor:0,patch:0};e.HttpAdapter=HttpAdapter,e.addAction=addAction,e.addActions=function addActions(e){return e||(e={}),function(n){return t.utils.forOwn(e,function(e,t){addAction(t,e)(n)}),n}},e.version=p,Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-http.min.map \ No newline at end of file diff --git a/dist/js-data-http.min.js.map b/dist/js-data-http.min.js.map new file mode 100644 index 0000000..769f32f --- /dev/null +++ b/dist/js-data-http.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["dist/js-data-http.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","deepMixIn","method","getEndpoint","basePath","isSorN","pathname","apply","resolve","then","HTTP","window","self","axios","createCommonjsModule","fn","webpackUniversalModuleDefinition","root","commonjsGlobal","modules","__webpack_require__","moduleId","installedModules","loaded","m","c","p","createInstance","defaultConfig","context","Axios","instance","bind","prototype","utils$$1","extend","defaults","create","instanceConfig","merge","Cancel","CancelToken","isCancel","all","promises","Promise","spread","default","isFunction","obj","i","l","Object","hasOwnProperty","result","assignValue","isBuffer","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","document","a","b","thisArg","trim","str","wrap","constructor","isSlowBuffer","readFloatLE","slice","_isBuffer","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","toLowerCase","baseURL","chain","undefined","promise","unshiftRequestInterceptors","interceptor","unshift","fulfilled","rejected","pushResponseInterceptors","shift","forEachMethodNoData","forEachMethodWithData","setContentTypeIfUnset","headers","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","getDefaultAdapter","XMLHttpRequest","process","transformRequest","JSON","stringify","transformResponse","parse","e","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","normalizedName","processHeader","toUpperCase","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","xhrAdapter","dispatchXhrRequest","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","handleProgress","ontimeout","handleTimeout","auth","username","password","Authorization","open","paramsSerializer","handleLoad","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseType","responseText","statusText","onerror","handleError","cookies","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","onCanceled","cancel","abort","send","enhanceError","message","code","error","serializedParams","serialize","parseValue","parsed","split","parser","line","substr","standardBrowserEnv","resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","charAt","originURL","test","userAgent","createElement","location","requestURL","nonStandardBrowserEnv","E","chars","input","block","charCode","String","output","idx","map","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","handlers","use","eject","forEachHandler","h","throwIfCancellationRequested","throwIfRequested","transformData","cleanHeaderConfig","onAdapterResolution","onAdapterRejection","reason","fns","transform","__CANCEL__","relativeURL","executor","resolvePromise","promiseExecutor","token","source","callback","arr","Symbol","iterator","defineProperty","enumerable","configurable","writable","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","toStrip","relationFields","omit","debug","raw","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","respond","_response","_this2","_props","_create","_results2","created","createMany","_this3","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","find","makeBelongsToForeignKey","relatedItem","setLocalField","keys","findAll","where","idAttribute","in","relatedItems","foreignKey","_this7","_find","loadRelationsFor","_ref","_ref2","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_ref3","_ref4","_this9","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","getOpt","opt","plainCopy","_this10","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this11","relatedMapper","makeHasManyLocalKeys","x","itemKeys","_this12","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this13","_sum","_results7","update","_this14","_update","_results8","updated","updateAll","_this15","_updateAll","_results9","updateMany","_this16","_records","_updateMany","_results10","hasFetch","fetch","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","console","_console","_fetch","_x","requestConfig","Headers","body","json","relationList","endpoint","parent","parentKey","parentDef","parentId","_","copy","start","payload","cache","logResponse","toUTCString","getTime","log","catch","_this17","version","full","major","minor","patch","addActions"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index 232e18b..fdf8541 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,2844 +1,2981 @@ /*! * js-data-fetch -* @version 3.0.0-rc.3 - Homepage +* @version 3.0.0 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) : - typeof define === 'function' && define.amd ? define('js-data-fetch', ['exports', 'js-data'], factory) : - (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); -}(this, function (exports,jsData) { 'use strict'; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('js-data')) : + typeof define === 'function' && define.amd ? define('js-data-fetch', ['exports', 'js-data'], factory) : + (factory((global.JSDataHttp = global.JSDataHttp || {}),global.JSData)); +}(this, (function (exports,jsData) { 'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; - var defineProperty = function (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; - }; - var slicedToArray = function () { - 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"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - return _arr; - } - return function (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"); - } - }; - }(); - var noop = function noop() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - var opts = args[args.length - 1]; - this.dbg.apply(this, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - var noop2 = function noop2() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - var opts = args[args.length - 2]; - this.dbg.apply(this, [opts.op].concat(args)); - return jsData.utils.resolve(); - }; - var unique = function unique(array) { - var seen = {}; - var final = []; - array.forEach(function (item) { - if (item in seen) { - return; - } - final.push(item); - seen[item] = 0; - }); - return final; - }; - var withoutRelations = function withoutRelations(mapper, props, opts) { - opts || (opts = {}); - opts.with || (opts.with = []); - var relationFields = mapper.relationFields || []; - var toStrip = relationFields.filter(function (value) { - return opts.with.indexOf(value) === -1; - }); - return jsData.utils.omit(props, toStrip); - }; - /** - * Response object used when `raw` is `true`. May contain other fields in - * addition to `data`. - * - * @class Response - */ - function Response(data, meta, op) { - meta || (meta = {}); - /** - * Response data. - * - * @name Response#data - * @type {*} - */ - this.data = data; - jsData.utils.fillIn(this, meta); - /** - * The operation for which the response was created. - * - * @name Response#op - * @type {string} - */ - this.op = op; - } - var DEFAULTS$1 = { - /** - * Whether to log debugging information. - * - * @name Adapter#debug - * @type {boolean} - * @default false - */ - debug: false, - - /** - * Whether to return a more detailed response object. - * - * @name Adapter#raw - * @type {boolean} - * @default false - */ - raw: false - }; - /** - * Abstract class meant to be extended by adapters. - * - * @class Adapter - * @abstract - * @extends Component - * @param {Object} [opts] Configuration opts. - * @param {boolean} [opts.debug=false] Whether to log debugging information. - * @param {boolean} [opts.raw=false] Whether to return a more detailed response - * object. - */ - function Adapter(opts) { - jsData.utils.classCallCheck(this, Adapter); - jsData.Component.call(this, opts); - opts || (opts = {}); - jsData.utils.fillIn(opts, DEFAULTS$1); - jsData.utils.fillIn(this, opts); +var defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; } - jsData.Component.extend({ - constructor: Adapter, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#afterCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} props The `props` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `afterCount` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterCount: noop2, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `afterCreate` - * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreate: noop2, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#afterCreate - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `afterCreateMany` - * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. - */ - afterCreateMany: noop2, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#afterDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `afterDestroy` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroy: noop2, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#afterDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `afterDestroyAll` - * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. - */ - afterDestroyAll: noop2, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#afterFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `afterFind` - * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. - */ - afterFind: noop2, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#afterFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `afterFindAll` - * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. - */ - afterFindAll: noop2, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#afterSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {string} field The `field` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `afterSum` - * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. - */ - afterSum: noop2, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#afterUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `afterUpdate` - * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdate: noop2, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#afterUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `afterUpdateAll` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateAll: noop2, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. - * - * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#afterUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} records The `records` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `afterUpdateMany` - * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. - */ - afterUpdateMany: noop2, - - /** - * Lifecycle method method called by count. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes count to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. - * - * @name Adapter#beforeCount - * @method - * @param {Object} mapper The `mapper` argument passed to count. - * @param {Object} query The `query` argument passed to count. - * @param {Object} opts The `opts` argument passed to count. - * @property {string} opts.op `beforeCount` - */ - beforeCount: noop, - - /** - * Lifecycle method method called by create. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes create to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. - * - * @name Adapter#beforeCreate - * @method - * @param {Object} mapper The `mapper` argument passed to create. - * @param {Object} props The `props` argument passed to create. - * @param {Object} opts The `opts` argument passed to create. - * @property {string} opts.op `beforeCreate` - */ - beforeCreate: noop, - - /** - * Lifecycle method method called by createMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. - * - * @name Adapter#beforeCreateMany - * @method - * @param {Object} mapper The `mapper` argument passed to createMany. - * @param {Object[]} props The `props` argument passed to createMany. - * @param {Object} opts The `opts` argument passed to createMany. - * @property {string} opts.op `beforeCreateMany` - */ - beforeCreateMany: noop, - - /** - * Lifecycle method method called by destroy. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. - * - * @name Adapter#beforeDestroy - * @method - * @param {Object} mapper The `mapper` argument passed to destroy. - * @param {(string|number)} id The `id` argument passed to destroy. - * @param {Object} opts The `opts` argument passed to destroy. - * @property {string} opts.op `beforeDestroy` - */ - beforeDestroy: noop, - - /** - * Lifecycle method method called by destroyAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. - * - * @name Adapter#beforeDestroyAll - * @method - * @param {Object} mapper The `mapper` argument passed to destroyAll. - * @param {Object} query The `query` argument passed to destroyAll. - * @param {Object} opts The `opts` argument passed to destroyAll. - * @property {string} opts.op `beforeDestroyAll` - */ - beforeDestroyAll: noop, - - /** - * Lifecycle method method called by find. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes find to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. - * - * @name Adapter#beforeFind - * @method - * @param {Object} mapper The `mapper` argument passed to find. - * @param {(string|number)} id The `id` argument passed to find. - * @param {Object} opts The `opts` argument passed to find. - * @property {string} opts.op `beforeFind` - */ - beforeFind: noop, - - /** - * Lifecycle method method called by findAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. - * - * @name Adapter#beforeFindAll - * @method - * @param {Object} mapper The `mapper` argument passed to findAll. - * @param {Object} query The `query` argument passed to findAll. - * @param {Object} opts The `opts` argument passed to findAll. - * @property {string} opts.op `beforeFindAll` - */ - beforeFindAll: noop, - - /** - * Lifecycle method method called by sum. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes sum to wait for the Promise to resolve before continuing. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. - * - * @name Adapter#beforeSum - * @method - * @param {Object} mapper The `mapper` argument passed to sum. - * @param {Object} query The `query` argument passed to sum. - * @param {Object} opts The `opts` argument passed to sum. - * @property {string} opts.op `beforeSum` - */ - beforeSum: noop, - - /** - * Lifecycle method method called by update. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes update to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. - * - * @name Adapter#beforeUpdate - * @method - * @param {Object} mapper The `mapper` argument passed to update. - * @param {(string|number)} id The `id` argument passed to update. - * @param {Object} props The `props` argument passed to update. - * @param {Object} opts The `opts` argument passed to update. - * @property {string} opts.op `beforeUpdate` - */ - beforeUpdate: noop, - - /** - * Lifecycle method method called by updateAll. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. - * - * @name Adapter#beforeUpdateAll - * @method - * @param {Object} mapper The `mapper` argument passed to updateAll. - * @param {Object} props The `props` argument passed to updateAll. - * @param {Object} query The `query` argument passed to updateAll. - * @param {Object} opts The `opts` argument passed to updateAll. - * @property {string} opts.op `beforeUpdateAll` - */ - beforeUpdateAll: noop, - - /** - * Lifecycle method method called by updateMany. - * - * Override this method to add custom behavior for this lifecycle hook. - * - * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. - * - * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. - * - * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. - * - * @name Adapter#beforeUpdateMany - * @method - * @param {Object} mapper The `mapper` argument passed to updateMany. - * @param {Object[]} props The `props` argument passed to updateMany. - * @param {Object} opts The `opts` argument passed to updateMany. - * @property {string} opts.op `beforeUpdateMany` - */ - beforeUpdateMany: noop, - - /** - * Retrieve the number of records that match the selection query. Called by - * `Mapper#count`. - * - * @name Adapter#count - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - var _this = this; - - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeCount lifecycle hook - op = opts.op = 'beforeCount'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'count'; - _this.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this._count(mapper, query, opts)); - }).then(function (results) { - var _results = slicedToArray(results, 2); - - var data = _results[0]; - var result = _results[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = _this.respond(response, opts); - - // afterCount lifecycle hook - op = opts.op = 'afterCount'; - return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Create a new record. Called by `Mapper#create`. - * - * @name Adapter#create - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The record to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - var _this2 = this; - - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreate lifecycle hook - op = opts.op = 'beforeCreate'; - return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'create'; - _this2.dbg(op, mapper, props, opts); - return jsData.utils.resolve(_this2._create(mapper, props, opts)); - }).then(function (results) { - var _results2 = slicedToArray(results, 2); - - var data = _results2[0]; - var result = _results2[1]; - - result || (result = {}); - var response = new Response(data, result, 'create'); - response.created = data ? 1 : 0; - response = _this2.respond(response, opts); - - // afterCreate lifecycle hook - op = opts.op = 'afterCreate'; - return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Create multiple records in a single batch. Called by `Mapper#createMany`. - * - * @name Adapter#createMany - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The records to be created. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - var _this3 = this; - - var op = void 0; - props || (props = {}); - opts || (opts = {}); - - // beforeCreateMany lifecycle hook - op = opts.op = 'beforeCreateMany'; - return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = props.map(function (record) { - return withoutRelations(mapper, record, opts); - }); - op = opts.op = 'createMany'; - _this3.dbg(op, mapper, props, opts); - return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); - }).then(function (results) { - var _results3 = slicedToArray(results, 2); - - var data = _results3[0]; - var result = _results3[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'createMany'); - response.created = data.length; - response = _this3.respond(response, opts); - - // afterCreateMany lifecycle hook - op = opts.op = 'afterCreateMany'; - return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Destroy the record with the given primary key. Called by - * `Mapper#destroy`. - * - * @name Adapter#destroy - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - var _this4 = this; - - var op = void 0; - opts || (opts = {}); - - // beforeDestroy lifecycle hook - op = opts.op = 'beforeDestroy'; - return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { - op = opts.op = 'destroy'; - _this4.dbg(op, mapper, id, opts); - return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); - }).then(function (results) { - var _results4 = slicedToArray(results, 2); - - var data = _results4[0]; - var result = _results4[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroy'); - response = _this4.respond(response, opts); - - // afterDestroy lifecycle hook - op = opts.op = 'afterDestroy'; - return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Destroy the records that match the selection query. Called by - * `Mapper#destroyAll`. - * - * @name Adapter#destroyAll - * @method - * @param {Object} mapper the mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - var _this5 = this; - - var op = void 0; - query || (query = {}); - opts || (opts = {}); - - // beforeDestroyAll lifecycle hook - op = opts.op = 'beforeDestroyAll'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - op = opts.op = 'destroyAll'; - _this5.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); - }).then(function (results) { - var _results5 = slicedToArray(results, 2); - - var data = _results5[0]; - var result = _results5[1]; - - result || (result = {}); - var response = new Response(data, result, 'destroyAll'); - response = _this5.respond(response, opts); - - // afterDestroyAll lifecycle hook - op = opts.op = 'afterDestroyAll'; - return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Load a belongsTo relationship. - * - * Override with care. - * - * @name Adapter#loadBelongsTo - * @method - * @return {Promise} - */ - loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { - var _this6 = this; - - var relationDef = def.getRelation(); - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - var _ret = function () { - var record = records; - return { - v: _this6.find(relationDef, _this6.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { - def.setLocalField(record, relatedItem); - }) - }; - }(); + return obj; +}; - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } else { - var keys = records.map(function (record) { - return _this6.makeBelongsToForeignKey(mapper, def, record); - }).filter(function (key) { - return key; - }); - return this.findAll(relationDef, { - where: defineProperty({}, relationDef.idAttribute, { - 'in': keys - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (record) { - relatedItems.forEach(function (relatedItem) { - if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { - def.setLocalField(record, relatedItem); - } - }); - }); - }); - } - }, - - - /** - * Retrieve the record with the given primary key. Called by `Mapper#find`. - * - * @name Adapter#find - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - var _this7 = this; - - var record = void 0, - op = void 0; - var meta = {}; - opts || (opts = {}); - opts.with || (opts.with = []); - - // beforeFind lifecycle hook - op = opts.op = 'beforeFind'; - return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { - op = opts.op = 'find'; - _this7.dbg(op, mapper, id, opts); - return jsData.utils.resolve(_this7._find(mapper, id, opts)); - }).then(function (results) { - var _results6 = slicedToArray(results, 2); - - var _record = _results6[0]; - var _meta = _results6[1]; - - if (!_record) { - return; - } - record = _record; - meta = _meta; - var tasks = []; - - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasOne') { - task = _this7.loadHasOne(mapper, def, record, __opts); - } else { - task = _this7.loadHasMany(mapper, def, record, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = _this7.loadHasManyLocalKeys(mapper, def, record, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = _this7.loadHasManyForeignKeys(mapper, def, record, __opts); - } else if (def.type === 'belongsTo') { - task = _this7.loadBelongsTo(mapper, def, record, __opts); - } - if (task) { - tasks.push(task); - } - }); - return jsData.utils.Promise.all(tasks); - }).then(function () { - var response = new Response(record, meta, 'find'); - response.found = record ? 1 : 0; - response = _this7.respond(response, opts); - // afterFind lifecycle hook - op = opts.op = 'afterFind'; - return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Retrieve the records that match the selection query. - * - * @name Adapter#findAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @param {string[]} [opts.with=[]] Relations to eager load. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - var _this8 = this; - - opts || (opts = {}); - opts.with || (opts.with = []); - - var records = []; - var meta = {}; - var op = void 0; - var activeWith = opts._activeWith; - - if (jsData.utils.isObject(activeWith)) { - var activeQuery = activeWith.query || {}; - if (activeWith.replace) { - query = activeQuery; - } else { - jsData.utils.deepFillIn(query, activeQuery); - } - } - // beforeFindAll lifecycle hook - op = opts.op = 'beforeFindAll'; - return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { - op = opts.op = 'findAll'; - _this8.dbg(op, mapper, query, opts); - return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); - }).then(function (results) { - var _results7 = slicedToArray(results, 2); - - var _records = _results7[0]; - var _meta = _results7[1]; - - _records || (_records = []); - records = _records; - meta = _meta; - var tasks = []; - jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { - var task = void 0; - if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { - if (def.type === 'hasMany') { - task = _this8.loadHasMany(mapper, def, records, __opts); - } else { - task = _this8.loadHasOne(mapper, def, records, __opts); - } - } else if (def.type === 'hasMany' && def.localKeys) { - task = _this8.loadHasManyLocalKeys(mapper, def, records, __opts); - } else if (def.type === 'hasMany' && def.foreignKeys) { - task = _this8.loadHasManyForeignKeys(mapper, def, records, __opts); - } else if (def.type === 'belongsTo') { - task = _this8.loadBelongsTo(mapper, def, records, __opts); - } - if (task) { - tasks.push(task); - } - }); - return jsData.utils.Promise.all(tasks); - }).then(function () { - var response = new Response(records, meta, 'findAll'); - response.found = records.length; - response = _this8.respond(response, opts); - - // afterFindAll lifecycle hook - op = opts.op = 'afterFindAll'; - return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Resolve the value of the specified option based on the given options and - * this adapter's settings. Override with care. - * - * @name Adapter#getOpt - * @method - * @param {string} opt The name of the option. - * @param {Object} [opts] Configuration options. - * @return {*} The value of the specified option. - */ - getOpt: function getOpt(opt, opts) { - opts || (opts = {}); - return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); - }, - - - /** - * Load a hasMany relationship. - * - * Override with care. - * - * @name Adapter#loadHasMany - * @method - * @return {Promise} - */ - loadHasMany: function loadHasMany(mapper, def, records, __opts) { - var _this9 = this; - - var singular = false; - - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - singular = true; - records = [records]; - } - var IDs = records.map(function (record) { - return _this9.makeHasManyForeignKey(mapper, def, record); - }); - var query = { - where: {} - }; - var criteria = query.where[def.foreignKey] = {}; - if (singular) { - // more efficient query when we only have one record - criteria['=='] = IDs[0]; - } else { - criteria['in'] = IDs.filter(function (id) { - return id; - }); - } - return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { - records.forEach(function (record) { - var attached = []; - // avoid unneccesary iteration when we only have one record - if (singular) { - attached = relatedItems; - } else { - relatedItems.forEach(function (relatedItem) { - if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { - attached.push(relatedItem); - } - }); - } - def.setLocalField(record, attached); - }); - }); - }, - loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { - var _this10 = this; - var record = void 0; - var relatedMapper = def.getRelation(); - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - if (record) { - return this.findAll(relatedMapper, { - where: defineProperty({}, relatedMapper.idAttribute, { - 'in': this.makeHasManyLocalKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - var _ret2 = function () { - var localKeys = []; - records.forEach(function (record) { - localKeys = localKeys.concat(_this10.makeHasManyLocalKeys(mapper, def, record)); - }); - return { - v: _this10.findAll(relatedMapper, { - where: defineProperty({}, relatedMapper.idAttribute, { - 'in': unique(localKeys).filter(function (x) { - return x; - }) - }) - }, __opts).then(function (relatedItems) { - records.forEach(function (item) { - var attached = []; - var itemKeys = jsData.utils.get(item, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - relatedItems.forEach(function (relatedItem) { - if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { - attached.push(relatedItem); - } - }); - def.setLocalField(item, attached); - }); - return relatedItems; - }) - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; - } - }, - loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { - var _this11 = this; - var relatedMapper = def.getRelation(); - var idAttribute = mapper.idAttribute; - var record = void 0; - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - record = records; - } - if (record) { - return this.findAll(def.getRelation(), { - where: defineProperty({}, def.foreignKeys, { - 'contains': this.makeHasManyForeignKeys(mapper, def, record) - }) - }, __opts).then(function (relatedItems) { - def.setLocalField(record, relatedItems); - }); - } else { - return this.findAll(relatedMapper, { - where: defineProperty({}, def.foreignKeys, { - 'isectNotEmpty': records.map(function (record) { - return _this11.makeHasManyForeignKeys(mapper, def, record); - }) - }) - }, __opts).then(function (relatedItems) { - var foreignKeysField = def.foreignKeys; - records.forEach(function (record) { - var _relatedItems = []; - var id = jsData.utils.get(record, idAttribute); - relatedItems.forEach(function (relatedItem) { - var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; - if (foreignKeys.indexOf(id) !== -1) { - _relatedItems.push(relatedItem); - } - }); - def.setLocalField(record, _relatedItems); - }); - }); - } - }, - - - /** - * Load a hasOne relationship. - * - * Override with care. - * - * @name Adapter#loadHasOne - * @method - * @return {Promise} - */ - loadHasOne: function loadHasOne(mapper, def, records, __opts) { - if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { - records = [records]; - } - return this.loadHasMany(mapper, def, records, __opts).then(function () { - records.forEach(function (record) { - var relatedData = def.getLocalField(record); - if (jsData.utils.isArray(relatedData) && relatedData.length) { - def.setLocalField(record, relatedData[0]); - } - }); - }); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * There may be reasons why you may want to override this method, like when - * the id of the parent doesn't exactly match up to the key on the child. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKey - * @method - * @return {*} - */ - makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Return the localKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyLocalKeys - * @method - * @return {*} - */ - makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { - var localKeys = []; - var itemKeys = jsData.utils.get(record, def.localKeys) || []; - itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); - localKeys = localKeys.concat(itemKeys); - return unique(localKeys).filter(function (x) { - return x; - }); - }, - - - /** - * Return the foreignKeys from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeHasManyForeignKeys - * @method - * @return {*} - */ - makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { - return jsData.utils.get(record, mapper.idAttribute); - }, - - - /** - * Return the foreignKey from the given record for the provided relationship. - * - * Override with care. - * - * @name Adapter#makeBelongsToForeignKey - * @method - * @return {*} - */ - makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { - return def.getForeignKey(record); - }, - - - /** - * Retrieve sum of the specified field of the records that match the selection - * query. Called by `Mapper#sum`. - * - * @name Adapter#sum - * @method - * @param {Object} mapper The mapper. - * @param {string} field By to sum. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - var _this12 = this; - - var op = void 0; - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); - } - query || (query = {}); - opts || (opts = {}); - - // beforeSum lifecycle hook - op = opts.op = 'beforeSum'; - return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { - // Allow for re-assignment from lifecycle hook - op = opts.op = 'sum'; - _this12.dbg(op, mapper, field, query, opts); - return jsData.utils.resolve(_this12._sum(mapper, field, query, opts)); - }).then(function (results) { - var _results8 = slicedToArray(results, 2); - - var data = _results8[0]; - var result = _results8[1]; - - result || (result = {}); - var response = new Response(data, result, op); - response = _this12.respond(response, opts); - - // afterSum lifecycle hook - op = opts.op = 'afterSum'; - return jsData.utils.resolve(_this12[op](mapper, field, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * @name Adapter#respond - * @method - * @param {Object} response Response object. - * @param {Object} opts Configuration options. - * return {Object} If `opts.raw == true` then return `response`, else return - * `response.data`. - */ - respond: function respond(response, opts) { - return this.getOpt('raw', opts) ? response : response.data; - }, - - - /** - * Apply the given update to the record with the specified primary key. Called - * by `Mapper#update`. - * - * @name Adapter#update - * @method - * @param {Object} mapper The mapper. - * @param {(string|number)} id The primary key of the record to be updated. - * @param {Object} props The update to apply to the record. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - var _this13 = this; - - props || (props = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdate lifecycle hook - op = opts.op = 'beforeUpdate'; - return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'update'; - _this13.dbg(op, mapper, id, props, opts); - return jsData.utils.resolve(_this13._update(mapper, id, props, opts)); - }).then(function (results) { - var _results9 = slicedToArray(results, 2); - - var data = _results9[0]; - var result = _results9[1]; - - result || (result = {}); - var response = new Response(data, result, 'update'); - response.updated = data ? 1 : 0; - response = _this13.respond(response, opts); - - // afterUpdate lifecycle hook - op = opts.op = 'afterUpdate'; - return jsData.utils.resolve(_this13[op](mapper, id, props, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Apply the given update to all records that match the selection query. - * Called by `Mapper#updateAll`. - * - * @name Adapter#updateAll - * @method - * @param {Object} mapper The mapper. - * @param {Object} props The update to apply to the selected records. - * @param {Object} [query] Selection query. - * @param {Object} [query.where] Filtering criteria. - * @param {string|Array} [query.orderBy] Sorting criteria. - * @param {string|Array} [query.sort] Same as `query.sort`. - * @param {number} [query.limit] Limit results. - * @param {number} [query.skip] Offset results. - * @param {number} [query.offset] Same as `query.skip`. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - var _this14 = this; - - props || (props = {}); - query || (query = {}); - opts || (opts = {}); - var op = void 0; - - // beforeUpdateAll lifecycle hook - op = opts.op = 'beforeUpdateAll'; - return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { - // Allow for re-assignment from lifecycle hook - props = _props === undefined ? props : _props; - props = withoutRelations(mapper, props, opts); - op = opts.op = 'updateAll'; - _this14.dbg(op, mapper, props, query, opts); - return jsData.utils.resolve(_this14._updateAll(mapper, props, query, opts)); - }).then(function (results) { - var _results10 = slicedToArray(results, 2); - - var data = _results10[0]; - var result = _results10[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateAll'); - response.updated = data.length; - response = _this14.respond(response, opts); - - // afterUpdateAll lifecycle hook - op = opts.op = 'afterUpdateAll'; - return jsData.utils.resolve(_this14[op](mapper, props, query, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Update the given records in a single batch. Called by `Mapper#updateMany`. - * - * @name Adapter#updateMany - * @method - * @param {Object} mapper The mapper. - * @param {Object[]} records The records to update. - * @param {Object} [opts] Configuration options. - * @param {boolean} [opts.raw=false] Whether to return a more detailed - * response object. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - var _this15 = this; - - records || (records = []); - opts || (opts = {}); - var op = void 0; - var idAttribute = mapper.idAttribute; - - records = records.filter(function (record) { - return jsData.utils.get(record, idAttribute); - }); - // beforeUpdateMany lifecycle hook - op = opts.op = 'beforeUpdateMany'; - return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { - // Allow for re-assignment from lifecycle hook - records = _records === undefined ? records : _records; - records = records.map(function (record) { - return withoutRelations(mapper, record, opts); - }); - op = opts.op = 'updateMany'; - _this15.dbg(op, mapper, records, opts); - return jsData.utils.resolve(_this15._updateMany(mapper, records, opts)); - }).then(function (results) { - var _results11 = slicedToArray(results, 2); - - var data = _results11[0]; - var result = _results11[1]; - - data || (data = []); - result || (result = {}); - var response = new Response(data, result, 'updateMany'); - response.updated = data.length; - response = _this15.respond(response, opts); - - // afterUpdateMany lifecycle hook - op = opts.op = 'afterUpdateMany'; - return jsData.utils.resolve(_this15[op](mapper, records, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - } - }); - var axios = undefined; - var hasFetch = false; - try { - hasFetch = window && window.fetch; - } catch (e) {} - function isValidString(value) { - return value != null && value !== ''; - } - function join(items, separator) { - separator || (separator = ''); - return items.filter(isValidString).join(separator); - } - function makePath() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - function encode(val) { - return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); - } - function buildUrl(url, params) { - if (!params) { - return url; - } - var parts = []; - jsData.utils.forOwn(params, function (val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - if (!jsData.utils.isArray(val)) { - val = [val]; - } - val.forEach(function (v) { - if (toString.call(v) === '[object Date]') { - v = v.toISOString(); - } else if (jsData.utils.isObject(v)) { - v = jsData.utils.toJson(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - if (parts.length > 0) { - url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); +var slicedToArray = function () { + 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"]) _i["return"](); + } finally { + if (_d) throw _e; + } } - return url; + return _arr; } - var DEFAULTS = { - /** - * Set a base path in order to use absolute URLs instead of relative URLs. - * - * @example - * const httpAdapter = new HttpAdapter({ - * basePath: 'https://mydomain.com' - * }); - * - * @name HttpAdapter#basePath - * @type {string} - * @since 3.0.0 - */ - basePath: '', - - /** - * Ensure that the request url has a trailing forward slash. - * - * @name HttpAdapter#forceTrailingSlash - * @type {boolean} - * @default false - * @since 3.0.0 - */ - forceTrailingSlash: false, - - /** - * The HTTP function that actually makes the HTTP request. By default this is - * `axios`. - * - * @name HttpAdapter#http - * @type {function} - * @since 3.0.0 - * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library - */ - http: axios, - - /** - * Default configuration options to be mixed into the `config` argument passed - * to {@link HttpAdapter#http}. - * - * @name HttpAdapter#httpConfig - * @type {object} - * @since 3.0.0 - */ - httpConfig: {}, - - /** - * Add a suffix to the request url, e.g. ".json". - * - * @name HttpAdapter#suffix - * @type {string} - * @since 3.0.0 - */ - suffix: '', - - /** - * Use `window.fetch` if available. - * - * @name HttpAdapter#useFetch - * @type {boolean} - * @default false - * @since 3.0.0 - * @see http://www.js-data.io/docs/js-data-http#using-windowfetch - */ - useFetch: false + return function (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"); + } }; +}(); - /** - * HttpAdapter class. - * - * @example - * import { DataStore } from 'js-data'; - * import { HttpAdapter } from 'js-data-http'; - * - * const httpAdapter = new HttpAdapter(); - * const store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * - * store.defineMapper('school'); - * store.defineMapper('student'); - * - * // GET /school/1 - * store.find('school', 1).then((school) => { - * console.log('school'); - * }); - * - * @class HttpAdapter - * @extends Adapter - * @param {object} [opts] Configuration options. - * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. - * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. - * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. - * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. - * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. - * @see http://www.js-data.io/docs/js-data-http - */ - function HttpAdapter(opts) { - jsData.utils.classCallCheck(this, HttpAdapter); - - opts || (opts = {}); - // Fill in any missing options with the defaults - jsData.utils.fillIn(opts, DEFAULTS); - Adapter.call(this, opts); +var noop = function noop() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; } - /** - * @name module:js-data-http.HttpAdapter - * @see HttpAdapter - */ - - Adapter.extend({ - constructor: HttpAdapter, - - /** - * @name HttpAdapter#afterDEL - * @method - * @param {string} url - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterDEL: noop2, - - /** - * @name HttpAdapter#afterGET - * @method - * @param {string} url - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterGET: noop2, - - /** - * @name HttpAdapter#afterHTTP - * @method - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterHTTP: noop2, - - /** - * @name HttpAdapter#afterPOST - * @method - * @param {string} url - * @param {object} data - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterPOST: noop2, - - /** - * @name HttpAdapter#afterPUT - * @method - * @param {string} url - * @param {object} data - * @param {object} config - * @param {object} opts - * @param {object} response - */ - afterPUT: noop2, - - /** - * @name HttpAdapter#beforeDEL - * @method - * @param {object} url - * @param {object} config - * @param {object} opts - */ - beforeDEL: noop, - - /** - * @name HttpAdapter#beforeGET - * @method - * @param {object} url - * @param {object} config - * @param {object} opts - */ - beforeGET: noop, - - /** - * @name HttpAdapter#beforeHTTP - * @method - * @param {object} config - * @param {object} opts - */ - beforeHTTP: noop, - - /** - * @name HttpAdapter#beforePOST - * @method - * @param {object} url - * @param {object} data - * @param {object} config - * @param {object} opts - */ - beforePOST: noop, - - /** - * @name HttpAdapter#beforePUT - * @method - * @param {object} url - * @param {object} data - * @param {object} config - * @param {object} opts - */ - beforePUT: noop, - - _count: function _count(mapper, query, opts) { - var _this = this; - - return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { - return _this._end(mapper, opts, response); - }); - }, - _create: function _create(mapper, props, opts) { - var _this2 = this; + var opts = args[args.length - 1]; + this.dbg.apply(this, [opts.op].concat(args)); + return jsData.utils.resolve(); +}; - return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this2._end(mapper, opts, response); - }); - }, - _createMany: function _createMany(mapper, props, opts) { - var _this3 = this; +var noop2 = function noop2() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } - return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this3._end(mapper, opts, response); - }); - }, - _destroy: function _destroy(mapper, id, opts) { - var _this4 = this; + var opts = args[args.length - 2]; + this.dbg.apply(this, [opts.op].concat(args)); + return jsData.utils.resolve(); +}; - return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { - return _this4._end(mapper, opts, response); - }); - }, - _destroyAll: function _destroyAll(mapper, query, opts) { - var _this5 = this; +var unique = function unique(array) { + var seen = {}; + var final = []; + array.forEach(function (item) { + if (item in seen) { + return; + } + final.push(item); + seen[item] = 0; + }); + return final; +}; - return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { - return _this5._end(mapper, opts, response); - }); - }, - _end: function _end(mapper, opts, response) { - return [this.deserialize(mapper, response, opts), response]; - }, - _find: function _find(mapper, id, opts) { - var _this6 = this; - - return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { - return _this6._end(mapper, opts, response); - }); - }, - _findAll: function _findAll(mapper, query, opts) { - var _this7 = this; +var withoutRelations = function withoutRelations(mapper, props, opts) { + opts || (opts = {}); + opts.with || (opts.with = []); + var relationFields = mapper.relationFields || []; + var toStrip = relationFields.filter(function (value) { + return opts.with.indexOf(value) === -1; + }); + return jsData.utils.omit(props, toStrip); +}; - return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { - return _this7._end(mapper, opts, response); - }); - }, - _sum: function _sum(mapper, field, query, opts) { - var _this8 = this; - return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { - return _this8._end(mapper, opts, response); - }); - }, - _update: function _update(mapper, id, props, opts) { - var _this9 = this; - return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this9._end(mapper, opts, response); - }); - }, - _updateAll: function _updateAll(mapper, props, query, opts) { - var _this10 = this; +/** + * Response object used when `raw` is `true`. May contain other fields in + * addition to `data`. + * + * @class Response + */ +function Response(data, meta, op) { + meta || (meta = {}); - return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { - return _this10._end(mapper, opts, response); - }); - }, - _updateMany: function _updateMany(mapper, records, opts) { - var _this11 = this; + /** + * Response data. + * + * @name Response#data + * @type {*} + */ + this.data = data; - return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { - return _this11._end(mapper, opts, response); - }); - }, - - - /** - * Retrieve the number of records that match the selection `query`. - * - * @name HttpAdapter#count - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - count: function count(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params.count = true; - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.count.call(this, mapper, query, opts); - }, - - - /** - * Create a new the record from the provided `props`. - * - * @name HttpAdapter#create - * @method - * @param {object} mapper The mapper. - * @param {object} props Properties to send as the payload. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - create: function create(mapper, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.create.call(this, mapper, props, opts); - }, - - - /** - * Create multiple new records in batch. - * - * @name HttpAdapter#createMany - * @method - * @param {object} mapper The mapper. - * @param {array} props Array of property objects to send as the payload. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - createMany: function createMany(mapper, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.createMany.call(this, mapper, props, opts); - }, - - - /** - * Make an Http request to `url` according to the configuration in `config`. - * - * @name HttpAdapter#DEL - * @method - * @param {string} url Url for the request. - * @param {object} [config] Http configuration that will be passed to - * {@link HttpAdapter#HTTP}. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - DEL: function DEL(url, config, opts) { - var _this12 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'delete'; - - // beforeDEL lifecycle hook - op = opts.op = 'beforeDEL'; - return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'DEL'; - _this12.dbg(op, url, config, opts); - return _this12.HTTP(config, opts); - }).then(function (response) { - // afterDEL lifecycle hook - op = opts.op = 'afterDEL'; - return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Transform the server response object into the payload that will be returned - * to JSData. - * - * @name HttpAdapter#deserialize - * @method - * @param {object} mapper The mapper used for the operation. - * @param {object} response Response object from {@link HttpAdapter#HTTP}. - * @param {object} opts Configuration options. - * @return {(object|array)} Deserialized data. - */ - deserialize: function deserialize(mapper, response, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.deserialize)) { - return opts.deserialize(mapper, response, opts); - } - if (jsData.utils.isFunction(mapper.deserialize)) { - return mapper.deserialize(mapper, response, opts); - } - if (response && response.hasOwnProperty('data')) { - return response.data; - } - return response; - }, - - - /** - * Destroy the record with the given primary key. - * - * @name HttpAdapter#destroy - * @method - * @param {object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to destroy. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - destroy: function destroy(mapper, id, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.destroy.call(this, mapper, id, opts); - }, - - - /** - * Destroy the records that match the selection `query`. - * - * @name HttpAdapter#destroyAll - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - destroyAll: function destroyAll(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.destroyAll.call(this, mapper, query, opts); - }, - - - /** - * Log an error. - * - * @name HttpAdapter#error - * @method - * @param {...*} [args] Arguments to log. - */ - error: function error() { - if (console) { - var _console; - - (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); - } - }, - - - /** - * Make an Http request using `window.fetch`. - * - * @name HttpAdapter#fetch - * @method - * @param {object} config Request configuration. - * @param {object} config.data Payload for the request. - * @param {string} config.method Http method for the request. - * @param {object} config.headers Headers for the request. - * @param {object} config.params Querystring for the request. - * @param {string} config.url Url for the request. - */ - fetch: function (_fetch) { - function fetch(_x) { - return _fetch.apply(this, arguments); - } + jsData.utils.fillIn(this, meta); - fetch.toString = function () { - return _fetch.toString(); - }; + /** + * The operation for which the response was created. + * + * @name Response#op + * @type {string} + */ + this.op = op; +} - return fetch; - }(function (config) { - var requestConfig = { - method: config.method, - // turn the plain headers object into the Fetch Headers object - headers: new Headers(config.headers || {}) - }; +var DEFAULTS$1 = { + /** + * Whether to log debugging information. + * + * @name Adapter#debug + * @type {boolean} + * @default false + */ + debug: false, - if (config.data) { - requestConfig.body = jsData.utils.toJson(config.data); - } + /** + * Whether to return a more detailed response object. + * + * @name Adapter#raw + * @type {boolean} + * @default false + */ + raw: false - return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { - response.config = { - method: config.method, - url: config.url - }; - return response.json().then(function (data) { - response.data = data; - return response; - }); - }); - }), - - - /** - * Retrieve the record with the given primary key. - * - * @name HttpAdapter#find - * @method - * @param {object} mapper The mapper. - * @param {(string|number)} id Primary key of the record to retrieve. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - find: function find(mapper, id, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.find.call(this, mapper, id, opts); - }, - - - /** - * Retrieve the records that match the selection `query`. - * - * @name HttpAdapter#findAll - * @method - * @param {object} mapper The mapper. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - findAll: function findAll(mapper, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.findAll.call(this, mapper, query, opts); - }, - - - /** - * Make a GET request. - * - * @name HttpAdapter#GET - * @method - * @param {string} url The url for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - GET: function GET(url, config, opts) { - var _this13 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.method = config.method || 'get'; - - // beforeGET lifecycle hook - op = opts.op = 'beforeGET'; - return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'GET'; - _this13.dbg(op, url, config, opts); - return _this13.HTTP(config, opts); - }).then(function (response) { - // afterGET lifecycle hook - op = opts.op = 'afterGET'; - return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * @name HttpAdapter#getEndpoint - * @method - * @param {object} mapper The Mapper. - * @param {*} id The primary key, if any. - * @param {boolean} opts Configuration options. - * @return {string} Full path. - */ - getEndpoint: function getEndpoint(mapper, id, opts) { - var _this14 = this; - - opts || (opts = {}); - opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; - var relationList = mapper.relationList || []; - var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; - - relationList.forEach(function (def) { - if (def.type !== 'belongsTo' || !def.parent) { - return; - } - var item = void 0; - var parentKey = def.foreignKey; - var parentDef = def.getRelation(); - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete opts.params[parentKey]; - } - return false; - } else { - delete opts.params[parentKey]; + /** + * Abstract class meant to be extended by adapters. + * + * @class Adapter + * @abstract + * @extends Component + * @param {Object} [opts] Configuration opts. + * @param {boolean} [opts.debug=false] Whether to log debugging information. + * @param {boolean} [opts.raw=false] Whether to return a more detailed response + * object. + */ +};function Adapter(opts) { + jsData.utils.classCallCheck(this, Adapter); + jsData.Component.call(this, opts); + opts || (opts = {}); + jsData.utils.fillIn(opts, DEFAULTS$1); + jsData.utils.fillIn(this, opts); +} - if (jsData.utils.isObject(id)) { - item = id; - } +jsData.Component.extend({ + constructor: Adapter, - if (item) { - parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); - } + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#afterCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} props The `props` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `afterCount` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterCount: noop2, - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - jsData.utils._(_opts, parentDef); - endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `afterCreate` + * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreate: noop2, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#afterCreate + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `afterCreateMany` + * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`. + */ + afterCreateMany: noop2, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#afterDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `afterDestroy` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroy: noop2, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#afterDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `afterDestroyAll` + * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`. + */ + afterDestroyAll: noop2, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#afterFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `afterFind` + * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`. + */ + afterFind: noop2, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#afterFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `afterFindAll` + * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`. + */ + afterFindAll: noop2, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#afterSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {string} field The `field` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `afterSum` + * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`. + */ + afterSum: noop2, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#afterUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `afterUpdate` + * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdate: noop2, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#afterUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `afterUpdateAll` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateAll: noop2, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any. + * + * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#afterUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} records The `records` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `afterUpdateMany` + * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`. + */ + afterUpdateMany: noop2, + + /** + * Lifecycle method method called by count. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes count to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by count. + * + * @name Adapter#beforeCount + * @method + * @param {Object} mapper The `mapper` argument passed to count. + * @param {Object} query The `query` argument passed to count. + * @param {Object} opts The `opts` argument passed to count. + * @property {string} opts.op `beforeCount` + */ + beforeCount: noop, + + /** + * Lifecycle method method called by create. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes create to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by create. + * + * @name Adapter#beforeCreate + * @method + * @param {Object} mapper The `mapper` argument passed to create. + * @param {Object} props The `props` argument passed to create. + * @param {Object} opts The `opts` argument passed to create. + * @property {string} opts.op `beforeCreate` + */ + beforeCreate: noop, + + /** + * Lifecycle method method called by createMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes createMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany. + * + * @name Adapter#beforeCreateMany + * @method + * @param {Object} mapper The `mapper` argument passed to createMany. + * @param {Object[]} props The `props` argument passed to createMany. + * @param {Object} opts The `opts` argument passed to createMany. + * @property {string} opts.op `beforeCreateMany` + */ + beforeCreateMany: noop, + + /** + * Lifecycle method method called by destroy. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroy to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy. + * + * @name Adapter#beforeDestroy + * @method + * @param {Object} mapper The `mapper` argument passed to destroy. + * @param {(string|number)} id The `id` argument passed to destroy. + * @param {Object} opts The `opts` argument passed to destroy. + * @property {string} opts.op `beforeDestroy` + */ + beforeDestroy: noop, + + /** + * Lifecycle method method called by destroyAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll. + * + * @name Adapter#beforeDestroyAll + * @method + * @param {Object} mapper The `mapper` argument passed to destroyAll. + * @param {Object} query The `query` argument passed to destroyAll. + * @param {Object} opts The `opts` argument passed to destroyAll. + * @property {string} opts.op `beforeDestroyAll` + */ + beforeDestroyAll: noop, + + /** + * Lifecycle method method called by find. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes find to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by find. + * + * @name Adapter#beforeFind + * @method + * @param {Object} mapper The `mapper` argument passed to find. + * @param {(string|number)} id The `id` argument passed to find. + * @param {Object} opts The `opts` argument passed to find. + * @property {string} opts.op `beforeFind` + */ + beforeFind: noop, + + /** + * Lifecycle method method called by findAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes findAll to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll. + * + * @name Adapter#beforeFindAll + * @method + * @param {Object} mapper The `mapper` argument passed to findAll. + * @param {Object} query The `query` argument passed to findAll. + * @param {Object} opts The `opts` argument passed to findAll. + * @property {string} opts.op `beforeFindAll` + */ + beforeFindAll: noop, + + /** + * Lifecycle method method called by sum. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes sum to wait for the Promise to resolve before continuing. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum. + * + * @name Adapter#beforeSum + * @method + * @param {Object} mapper The `mapper` argument passed to sum. + * @param {Object} query The `query` argument passed to sum. + * @param {Object} opts The `opts` argument passed to sum. + * @property {string} opts.op `beforeSum` + */ + beforeSum: noop, + + /** + * Lifecycle method method called by update. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes update to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by update. + * + * @name Adapter#beforeUpdate + * @method + * @param {Object} mapper The `mapper` argument passed to update. + * @param {(string|number)} id The `id` argument passed to update. + * @param {Object} props The `props` argument passed to update. + * @param {Object} opts The `opts` argument passed to update. + * @property {string} opts.op `beforeUpdate` + */ + beforeUpdate: noop, + + /** + * Lifecycle method method called by updateAll. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll. + * + * @name Adapter#beforeUpdateAll + * @method + * @param {Object} mapper The `mapper` argument passed to updateAll. + * @param {Object} props The `props` argument passed to updateAll. + * @param {Object} query The `query` argument passed to updateAll. + * @param {Object} opts The `opts` argument passed to updateAll. + * @property {string} opts.op `beforeUpdateAll` + */ + beforeUpdateAll: noop, + + /** + * Lifecycle method method called by updateMany. + * + * Override this method to add custom behavior for this lifecycle hook. + * + * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing. + * + * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value. + * + * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany. + * + * @name Adapter#beforeUpdateMany + * @method + * @param {Object} mapper The `mapper` argument passed to updateMany. + * @param {Object[]} props The `props` argument passed to updateMany. + * @param {Object} opts The `opts` argument passed to updateMany. + * @property {string} opts.op `beforeUpdateMany` + */ + beforeUpdateMany: noop, + + /** + * Retrieve the number of records that match the selection query. Called by + * `Mapper#count`. + * + * @name Adapter#count + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + var _this = this; + + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeCount lifecycle hook + op = opts.op = 'beforeCount'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'count'; + _this.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this._count(mapper, query, opts)); + }).then(function (results) { + var _results = slicedToArray(results, 2), + data = _results[0], + result = _results[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = _this.respond(response, opts); + + // afterCount lifecycle hook + op = opts.op = 'afterCount'; + return jsData.utils.resolve(_this[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Create a new record. Called by `Mapper#create`. + * + * @name Adapter#create + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The record to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + var _this2 = this; + + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate'; + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'create'; + _this2.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this2._create(mapper, props, opts)); + }).then(function (results) { + var _results2 = slicedToArray(results, 2), + data = _results2[0], + result = _results2[1]; + + result || (result = {}); + var response = new Response(data, result, 'create'); + response.created = data ? 1 : 0; + response = _this2.respond(response, opts); + + // afterCreate lifecycle hook + op = opts.op = 'afterCreate'; + return jsData.utils.resolve(_this2[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Create multiple records in a single batch. Called by `Mapper#createMany`. + * + * @name Adapter#createMany + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The records to be created. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + var _this3 = this; + + var op = void 0; + props || (props = {}); + opts || (opts = {}); + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany'; + return jsData.utils.resolve(this[op](mapper, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = props.map(function (record) { + return withoutRelations(mapper, record, opts); + }); + op = opts.op = 'createMany'; + _this3.dbg(op, mapper, props, opts); + return jsData.utils.resolve(_this3._createMany(mapper, props, opts)); + }).then(function (results) { + var _results3 = slicedToArray(results, 2), + data = _results3[0], + result = _results3[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'createMany'); + response.created = data.length; + response = _this3.respond(response, opts); + + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany'; + return jsData.utils.resolve(_this3[op](mapper, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Destroy the record with the given primary key. Called by + * `Mapper#destroy`. + * + * @name Adapter#destroy + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + var _this4 = this; + + var op = void 0; + opts || (opts = {}); + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + _this4.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this4._destroy(mapper, id, opts)); + }).then(function (results) { + var _results4 = slicedToArray(results, 2), + data = _results4[0], + result = _results4[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroy'); + response = _this4.respond(response, opts); + + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return jsData.utils.resolve(_this4[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Destroy the records that match the selection query. Called by + * `Mapper#destroyAll`. + * + * @name Adapter#destroyAll + * @method + * @param {Object} mapper the mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + var _this5 = this; + + var op = void 0; + query || (query = {}); + opts || (opts = {}); + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + _this5.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this5._destroyAll(mapper, query, opts)); + }).then(function (results) { + var _results5 = slicedToArray(results, 2), + data = _results5[0], + result = _results5[1]; + + result || (result = {}); + var response = new Response(data, result, 'destroyAll'); + response = _this5.respond(response, opts); + + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return jsData.utils.resolve(_this5[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Load a belongsTo relationship. + * + * Override with care. + * + * @name Adapter#loadBelongsTo + * @method + * @return {Promise} + */ + loadBelongsTo: function loadBelongsTo(mapper, def, records, __opts) { + var _this6 = this; + + var relationDef = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + var record = records; + return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts).then(function (relatedItem) { + def.setLocalField(record, relatedItem); + }); + } else { + var keys = records.map(function (record) { + return _this6.makeBelongsToForeignKey(mapper, def, record); + }).filter(function (key) { + return key; + }); + return this.findAll(relationDef, { + where: defineProperty({}, relationDef.idAttribute, { + 'in': keys + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (record) { + relatedItems.forEach(function (relatedItem) { + if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) { + def.setLocalField(record, relatedItem); + } + }); + }); + }); + } + }, + + + /** + * Retrieve the record with the given primary key. Called by `Mapper#find`. + * + * @name Adapter#find + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + var _this7 = this; + + var op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind'; + return jsData.utils.resolve(this[op](mapper, id, opts)).then(function () { + op = opts.op = 'find'; + _this7.dbg(op, mapper, id, opts); + return jsData.utils.resolve(_this7._find(mapper, id, opts)); + }).then(function (results) { + return _this7.loadRelationsFor(mapper, results, opts); + }).then(function (_ref) { + var _ref2 = slicedToArray(_ref, 2), + record = _ref2[0], + meta = _ref2[1]; + + var response = new Response(record, meta, 'find'); + response.found = record ? 1 : 0; + response = _this7.respond(response, opts); + + // afterFind lifecycle hook + op = opts.op = 'afterFind'; + return jsData.utils.resolve(_this7[op](mapper, id, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Retrieve the records that match the selection query. + * + * @name Adapter#findAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @param {string[]} [opts.with=[]] Relations to eager load. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + var _this8 = this; + + var op = void 0; + opts || (opts = {}); + opts.with || (opts.with = []); + + var activeWith = opts._activeWith; + + if (jsData.utils.isObject(activeWith)) { + var activeQuery = activeWith.query || {}; + if (activeWith.replace) { + query = activeQuery; + } else { + jsData.utils.deepFillIn(query, activeQuery); + } + } + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll'; + return jsData.utils.resolve(this[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll'; + _this8.dbg(op, mapper, query, opts); + return jsData.utils.resolve(_this8._findAll(mapper, query, opts)); + }).then(function (results) { + return _this8.loadRelationsFor(mapper, results, opts); + }).then(function (_ref3) { + var _ref4 = slicedToArray(_ref3, 2), + records = _ref4[0], + meta = _ref4[1]; + + var response = new Response(records, meta, 'findAll'); + response.found = records.length; + response = _this8.respond(response, opts); + + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll'; + return jsData.utils.resolve(_this8[op](mapper, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + loadRelationsFor: function loadRelationsFor(mapper, results, opts) { + var _this9 = this; + + var _results6 = slicedToArray(results, 1), + records = _results6[0]; + + var tasks = []; + + if (records) { + jsData.utils.forEachRelation(mapper, opts, function (def, __opts) { + var task = void 0; + if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) { + if (def.type === 'hasOne') { + task = _this9.loadHasOne(mapper, def, records, __opts); + } else { + task = _this9.loadHasMany(mapper, def, records, __opts); } + } else if (def.type === 'hasMany' && def.localKeys) { + task = _this9.loadHasManyLocalKeys(mapper, def, records, __opts); + } else if (def.type === 'hasMany' && def.foreignKeys) { + task = _this9.loadHasManyForeignKeys(mapper, def, records, __opts); + } else if (def.type === 'belongsTo') { + task = _this9.loadBelongsTo(mapper, def, records, __opts); + } + if (task) { + tasks.push(task); + } + }); + } + + return jsData.utils.Promise.all(tasks).then(function () { + return results; + }); + }, + + + /** + * Resolve the value of the specified option based on the given options and + * this adapter's settings. Override with care. + * + * @name Adapter#getOpt + * @method + * @param {string} opt The name of the option. + * @param {Object} [opts] Configuration options. + * @return {*} The value of the specified option. + */ + getOpt: function getOpt(opt, opts) { + opts || (opts = {}); + return opts[opt] === undefined ? jsData.utils.plainCopy(this[opt]) : jsData.utils.plainCopy(opts[opt]); + }, + + + /** + * Load a hasMany relationship. + * + * Override with care. + * + * @name Adapter#loadHasMany + * @method + * @return {Promise} + */ + loadHasMany: function loadHasMany(mapper, def, records, __opts) { + var _this10 = this; + + var singular = false; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + singular = true; + records = [records]; + } + var IDs = records.map(function (record) { + return _this10.makeHasManyForeignKey(mapper, def, record); + }); + var query = { + where: {} + }; + var criteria = query.where[def.foreignKey] = {}; + if (singular) { + // more efficient query when we only have one record + criteria['=='] = IDs[0]; + } else { + criteria['in'] = IDs.filter(function (id) { + return id; + }); + } + return this.findAll(def.getRelation(), query, __opts).then(function (relatedItems) { + records.forEach(function (record) { + var attached = []; + // avoid unneccesary iteration when we only have one record + if (singular) { + attached = relatedItems; + } else { + relatedItems.forEach(function (relatedItem) { + if (jsData.utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) { + attached.push(relatedItem); + } + }); + } + def.setLocalField(record, attached); + }); + }); + }, + loadHasManyLocalKeys: function loadHasManyLocalKeys(mapper, def, records, __opts) { + var _this11 = this; + + var record = void 0; + var relatedMapper = def.getRelation(); + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': this.makeHasManyLocalKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + var localKeys = []; + records.forEach(function (record) { + localKeys = localKeys.concat(_this11.makeHasManyLocalKeys(mapper, def, record)); + }); + return this.findAll(relatedMapper, { + where: defineProperty({}, relatedMapper.idAttribute, { + 'in': unique(localKeys).filter(function (x) { + return x; + }) + }) + }, __opts).then(function (relatedItems) { + records.forEach(function (item) { + var attached = []; + var itemKeys = jsData.utils.get(item, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + relatedItems.forEach(function (relatedItem) { + if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) { + attached.push(relatedItem); + } + }); + def.setLocalField(item, attached); + }); + return relatedItems; + }); + } + }, + loadHasManyForeignKeys: function loadHasManyForeignKeys(mapper, def, records, __opts) { + var _this12 = this; + + var relatedMapper = def.getRelation(); + var idAttribute = mapper.idAttribute; + var record = void 0; + + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + record = records; + } + + if (record) { + return this.findAll(def.getRelation(), { + where: defineProperty({}, def.foreignKeys, { + 'contains': this.makeHasManyForeignKeys(mapper, def, record) + }) + }, __opts).then(function (relatedItems) { + def.setLocalField(record, relatedItems); + }); + } else { + return this.findAll(relatedMapper, { + where: defineProperty({}, def.foreignKeys, { + 'isectNotEmpty': records.map(function (record) { + return _this12.makeHasManyForeignKeys(mapper, def, record); + }) + }) + }, __opts).then(function (relatedItems) { + var foreignKeysField = def.foreignKeys; + records.forEach(function (record) { + var _relatedItems = []; + var id = jsData.utils.get(record, idAttribute); + relatedItems.forEach(function (relatedItem) { + var foreignKeys = jsData.utils.get(relatedItems, foreignKeysField) || []; + if (foreignKeys.indexOf(id) !== -1) { + _relatedItems.push(relatedItem); + } + }); + def.setLocalField(record, _relatedItems); + }); + }); + } + }, + + + /** + * Load a hasOne relationship. + * + * Override with care. + * + * @name Adapter#loadHasOne + * @method + * @return {Promise} + */ + loadHasOne: function loadHasOne(mapper, def, records, __opts) { + if (jsData.utils.isObject(records) && !jsData.utils.isArray(records)) { + records = [records]; + } + return this.loadHasMany(mapper, def, records, __opts).then(function () { + records.forEach(function (record) { + var relatedData = def.getLocalField(record); + if (jsData.utils.isArray(relatedData) && relatedData.length) { + def.setLocalField(record, relatedData[0]); } }); + }); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * There may be reasons why you may want to override this method, like when + * the id of the parent doesn't exactly match up to the key on the child. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKey + * @method + * @return {*} + */ + makeHasManyForeignKey: function makeHasManyForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Return the localKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyLocalKeys + * @method + * @return {*} + */ + makeHasManyLocalKeys: function makeHasManyLocalKeys(mapper, def, record) { + var localKeys = []; + var itemKeys = jsData.utils.get(record, def.localKeys) || []; + itemKeys = jsData.utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys); + localKeys = localKeys.concat(itemKeys); + return unique(localKeys).filter(function (x) { + return x; + }); + }, + + + /** + * Return the foreignKeys from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeHasManyForeignKeys + * @method + * @return {*} + */ + makeHasManyForeignKeys: function makeHasManyForeignKeys(mapper, def, record) { + return jsData.utils.get(record, mapper.idAttribute); + }, + + + /** + * Return the foreignKey from the given record for the provided relationship. + * + * Override with care. + * + * @name Adapter#makeBelongsToForeignKey + * @method + * @return {*} + */ + makeBelongsToForeignKey: function makeBelongsToForeignKey(mapper, def, record) { + return def.getForeignKey(record); + }, + + + /** + * Retrieve sum of the specified field of the records that match the selection + * query. Called by `Mapper#sum`. + * + * @name Adapter#sum + * @method + * @param {Object} mapper The mapper. + * @param {string} field By to sum. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + var _this13 = this; + + var op = void 0; + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + query || (query = {}); + opts || (opts = {}); + + // beforeSum lifecycle hook + op = opts.op = 'beforeSum'; + return jsData.utils.resolve(this[op](mapper, field, query, opts)).then(function () { + // Allow for re-assignment from lifecycle hook + op = opts.op = 'sum'; + _this13.dbg(op, mapper, field, query, opts); + return jsData.utils.resolve(_this13._sum(mapper, field, query, opts)); + }).then(function (results) { + var _results7 = slicedToArray(results, 2), + data = _results7[0], + result = _results7[1]; + + result || (result = {}); + var response = new Response(data, result, op); + response = _this13.respond(response, opts); + + // afterSum lifecycle hook + op = opts.op = 'afterSum'; + return jsData.utils.resolve(_this13[op](mapper, field, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * @name Adapter#respond + * @method + * @param {Object} response Response object. + * @param {Object} opts Configuration options. + * return {Object} If `opts.raw == true` then return `response`, else return + * `response.data`. + */ + respond: function respond(response, opts) { + return this.getOpt('raw', opts) ? response : response.data; + }, + + + /** + * Apply the given update to the record with the specified primary key. Called + * by `Mapper#update`. + * + * @name Adapter#update + * @method + * @param {Object} mapper The mapper. + * @param {(string|number)} id The primary key of the record to be updated. + * @param {Object} props The update to apply to the record. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + var _this14 = this; + + props || (props = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate'; + return jsData.utils.resolve(this[op](mapper, id, props, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'update'; + _this14.dbg(op, mapper, id, props, opts); + return jsData.utils.resolve(_this14._update(mapper, id, props, opts)); + }).then(function (results) { + var _results8 = slicedToArray(results, 2), + data = _results8[0], + result = _results8[1]; + + result || (result = {}); + var response = new Response(data, result, 'update'); + response.updated = data ? 1 : 0; + response = _this14.respond(response, opts); + + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate'; + return jsData.utils.resolve(_this14[op](mapper, id, props, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Apply the given update to all records that match the selection query. + * Called by `Mapper#updateAll`. + * + * @name Adapter#updateAll + * @method + * @param {Object} mapper The mapper. + * @param {Object} props The update to apply to the selected records. + * @param {Object} [query] Selection query. + * @param {Object} [query.where] Filtering criteria. + * @param {string|Array} [query.orderBy] Sorting criteria. + * @param {string|Array} [query.sort] Same as `query.sort`. + * @param {number} [query.limit] Limit results. + * @param {number} [query.skip] Offset results. + * @param {number} [query.offset] Same as `query.skip`. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateAll: function updateAll(mapper, props, query, opts) { + var _this15 = this; + + props || (props = {}); + query || (query = {}); + opts || (opts = {}); + var op = void 0; + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll'; + return jsData.utils.resolve(this[op](mapper, props, query, opts)).then(function (_props) { + // Allow for re-assignment from lifecycle hook + props = _props === undefined ? props : _props; + props = withoutRelations(mapper, props, opts); + op = opts.op = 'updateAll'; + _this15.dbg(op, mapper, props, query, opts); + return jsData.utils.resolve(_this15._updateAll(mapper, props, query, opts)); + }).then(function (results) { + var _results9 = slicedToArray(results, 2), + data = _results9[0], + result = _results9[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateAll'); + response.updated = data.length; + response = _this15.respond(response, opts); + + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll'; + return jsData.utils.resolve(_this15[op](mapper, props, query, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Update the given records in a single batch. Called by `Mapper#updateMany`. + * + * @name Adapter#updateMany + * @method + * @param {Object} mapper The mapper. + * @param {Object[]} records The records to update. + * @param {Object} [opts] Configuration options. + * @param {boolean} [opts.raw=false] Whether to return a more detailed + * response object. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + var _this16 = this; + + records || (records = []); + opts || (opts = {}); + var op = void 0; + var idAttribute = mapper.idAttribute; + + records = records.filter(function (record) { + return jsData.utils.get(record, idAttribute); + }); + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return jsData.utils.resolve(this[op](mapper, records, opts)).then(function (_records) { + // Allow for re-assignment from lifecycle hook + records = _records === undefined ? records : _records; + records = records.map(function (record) { + return withoutRelations(mapper, record, opts); + }); + op = opts.op = 'updateMany'; + _this16.dbg(op, mapper, records, opts); + return jsData.utils.resolve(_this16._updateMany(mapper, records, opts)); + }).then(function (results) { + var _results10 = slicedToArray(results, 2), + data = _results10[0], + result = _results10[1]; + + data || (data = []); + result || (result = {}); + var response = new Response(data, result, 'updateMany'); + response.updated = data.length; + response = _this16.respond(response, opts); + + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return jsData.utils.resolve(_this16[op](mapper, records, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + } +}); + +/** + * Create a subclass of this Adapter: + * + * @example Adapter.extend + * // Normally you would do: import {Adapter} from 'js-data' + * const JSData = require('js-data@3.0.0-beta.10') + * const {Adapter} = JSData + * console.log('Using JSData v' + JSData.version.full) + * + * // Extend the class using ES2015 class syntax. + * class CustomAdapterClass extends Adapter { + * foo () { return 'bar' } + * static beep () { return 'boop' } + * } + * const customAdapter = new CustomAdapterClass() + * console.log(customAdapter.foo()) + * console.log(CustomAdapterClass.beep()) + * + * // Extend the class using alternate method. + * const OtherAdapterClass = Adapter.extend({ + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const otherAdapter = new OtherAdapterClass() + * console.log(otherAdapter.foo()) + * console.log(OtherAdapterClass.beep()) + * + * // Extend the class, providing a custom constructor. + * function AnotherAdapterClass () { + * Adapter.call(this) + * this.created_at = new Date().getTime() + * } + * Adapter.extend({ + * constructor: AnotherAdapterClass, + * foo () { return 'bar' } + * }, { + * beep () { return 'boop' } + * }) + * const anotherAdapter = new AnotherAdapterClass() + * console.log(anotherAdapter.created_at) + * console.log(anotherAdapter.foo()) + * console.log(AnotherAdapterClass.beep()) + * + * @method Adapter.extend + * @param {Object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {Object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {Object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this Adapter class. + */ + +var axios = undefined; +var hasFetch = false; + +try { + hasFetch = window && window.fetch; +} catch (e) {} + +function isValidString(value) { + return value != null && value !== ''; +} +function join(items, separator) { + separator || (separator = ''); + return items.filter(isValidString).join(separator); +} +function makePath() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var result = join(args, '/'); + return result.replace(/([^:/]|^)\/{2,}/g, '$1/'); +} + +function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); +} + +function buildUrl(url, params) { + if (!params) { + return url; + } + + var parts = []; + + jsData.utils.forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!jsData.utils.isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (jsData.utils.isObject(v)) { + v = jsData.utils.toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; +} + +var DEFAULTS = { + /** + * Set a base path in order to use absolute URLs instead of relative URLs. + * + * @example + * const httpAdapter = new HttpAdapter({ + * basePath: 'https://mydomain.com' + * }); + * + * @name HttpAdapter#basePath + * @type {string} + * @since 3.0.0 + */ + basePath: '', + + /** + * Ensure that the request url has a trailing forward slash. + * + * @name HttpAdapter#forceTrailingSlash + * @type {boolean} + * @default false + * @since 3.0.0 + */ + forceTrailingSlash: false, + + hasFetch: hasFetch, + + /** + * The HTTP function that actually makes the HTTP request. By default this is + * `axios`. + * + * @name HttpAdapter#http + * @type {function} + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library + */ + http: axios, + + /** + * Default configuration options to be mixed into the `config` argument passed + * to {@link HttpAdapter#http}. + * + * @name HttpAdapter#httpConfig + * @type {object} + * @since 3.0.0 + */ + httpConfig: {}, + + /** + * Add a suffix to the request url, e.g. ".json". + * + * @name HttpAdapter#suffix + * @type {string} + * @since 3.0.0 + */ + suffix: '', + + /** + * Use `window.fetch` if available. + * + * @name HttpAdapter#useFetch + * @type {boolean} + * @default false + * @since 3.0.0 + * @see http://www.js-data.io/docs/js-data-http#using-windowfetch + */ + useFetch: false + + /** + * HttpAdapter class. + * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * + * @class HttpAdapter + * @extends Adapter + * @param {object} [opts] Configuration options. + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http + */ +};function HttpAdapter(opts) { + jsData.utils.classCallCheck(this, HttpAdapter); + + opts || (opts = {}); + // Fill in any missing options with the defaults + jsData.utils.fillIn(opts, DEFAULTS); + Adapter.call(this, opts); +} + +/** + * @name module:js-data-http.HttpAdapter + * @see HttpAdapter + */ + +Adapter.extend({ + constructor: HttpAdapter, + + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterDEL: noop2, + + /** + * @name HttpAdapter#afterGET + * @method + * @param {string} url + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterGET: noop2, + + /** + * @name HttpAdapter#afterHTTP + * @method + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterHTTP: noop2, + + /** + * @name HttpAdapter#afterPOST + * @method + * @param {string} url + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterPOST: noop2, + + /** + * @name HttpAdapter#afterPUT + * @method + * @param {string} url + * @param {object} data + * @param {object} config + * @param {object} opts + * @param {object} response + */ + afterPUT: noop2, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {object} url + * @param {object} config + * @param {object} opts + */ + beforeDEL: noop, + + /** + * @name HttpAdapter#beforeGET + * @method + * @param {object} url + * @param {object} config + * @param {object} opts + */ + beforeGET: noop, + + /** + * @name HttpAdapter#beforeHTTP + * @method + * @param {object} config + * @param {object} opts + */ + beforeHTTP: noop, + + /** + * @name HttpAdapter#beforePOST + * @method + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts + */ + beforePOST: noop, + + /** + * @name HttpAdapter#beforePUT + * @method + * @param {object} url + * @param {object} data + * @param {object} config + * @param {object} opts + */ + beforePUT: noop, + + _count: function _count(mapper, query, opts) { + var _this = this; + + return this.GET(this.getPath('count', mapper, opts.params, opts), opts).then(function (response) { + return _this._end(mapper, opts, response); + }); + }, + _create: function _create(mapper, props, opts) { + var _this2 = this; + + return this.POST(this.getPath('create', mapper, props, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this2._end(mapper, opts, response); + }); + }, + _createMany: function _createMany(mapper, props, opts) { + var _this3 = this; + + return this.POST(this.getPath('createMany', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this3._end(mapper, opts, response); + }); + }, + _destroy: function _destroy(mapper, id, opts) { + var _this4 = this; + + return this.DEL(this.getPath('destroy', mapper, id, opts), opts).then(function (response) { + return _this4._end(mapper, opts, response); + }); + }, + _destroyAll: function _destroyAll(mapper, query, opts) { + var _this5 = this; + + return this.DEL(this.getPath('destroyAll', mapper, null, opts), opts).then(function (response) { + return _this5._end(mapper, opts, response); + }); + }, + _end: function _end(mapper, opts, response) { + return [this.deserialize(mapper, response, opts), response]; + }, + _find: function _find(mapper, id, opts) { + var _this6 = this; + + return this.GET(this.getPath('find', mapper, id, opts), opts).then(function (response) { + return _this6._end(mapper, opts, response); + }); + }, + _findAll: function _findAll(mapper, query, opts) { + var _this7 = this; + + return this.GET(this.getPath('findAll', mapper, opts.params, opts), opts).then(function (response) { + return _this7._end(mapper, opts, response); + }); + }, + _sum: function _sum(mapper, field, query, opts) { + var _this8 = this; + + return this.GET(this.getPath('sum', mapper, opts.params, opts), opts).then(function (response) { + return _this8._end(mapper, opts, response); + }); + }, + _update: function _update(mapper, id, props, opts) { + var _this9 = this; + + return this.PUT(this.getPath('update', mapper, id, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this9._end(mapper, opts, response); + }); + }, + _updateAll: function _updateAll(mapper, props, query, opts) { + var _this10 = this; + + return this.PUT(this.getPath('updateAll', mapper, null, opts), this.serialize(mapper, props, opts), opts).then(function (response) { + return _this10._end(mapper, opts, response); + }); + }, + _updateMany: function _updateMany(mapper, records, opts) { + var _this11 = this; + + return this.PUT(this.getPath('updateMany', mapper, null, opts), this.serialize(mapper, records, opts), opts).then(function (response) { + return _this11._end(mapper, opts, response); + }); + }, + + + /** + * Retrieve the number of records that match the selection `query`. + * + * @name HttpAdapter#count + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + count: function count(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params.count = true; + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.count.call(this, mapper, query, opts); + }, + + + /** + * Create a new the record from the provided `props`. + * + * @name HttpAdapter#create + * @method + * @param {object} mapper The mapper. + * @param {object} props Properties to send as the payload. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + create: function create(mapper, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.create.call(this, mapper, props, opts); + }, + + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @method + * @param {object} mapper The mapper. + * @param {array} props Array of property objects to send as the payload. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + createMany: function createMany(mapper, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.createMany.call(this, mapper, props, opts); + }, + + + /** + * Make an Http request to `url` according to the configuration in `config`. + * + * @name HttpAdapter#DEL + * @method + * @param {string} url Url for the request. + * @param {object} [config] Http configuration that will be passed to + * {@link HttpAdapter#HTTP}. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + DEL: function DEL(url, config, opts) { + var _this12 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'delete'; + + // beforeDEL lifecycle hook + op = opts.op = 'beforeDEL'; + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'DEL'; + _this12.dbg(op, url, config, opts); + return _this12.HTTP(config, opts); + }).then(function (response) { + // afterDEL lifecycle hook + op = opts.op = 'afterDEL'; + return jsData.utils.resolve(_this12[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Transform the server response object into the payload that will be returned + * to JSData. + * + * @name HttpAdapter#deserialize + * @method + * @param {object} mapper The mapper used for the operation. + * @param {object} response Response object from {@link HttpAdapter#HTTP}. + * @param {object} opts Configuration options. + * @return {(object|array)} Deserialized data. + */ + deserialize: function deserialize(mapper, response, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts); + } + if (jsData.utils.isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts); + } + if (response && response.hasOwnProperty('data')) { + return response.data; + } + return response; + }, + + + /** + * Destroy the record with the given primary key. + * + * @name HttpAdapter#destroy + * @method + * @param {object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to destroy. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + destroy: function destroy(mapper, id, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroy.call(this, mapper, id, opts); + }, + + + /** + * Destroy the records that match the selection `query`. + * + * @name HttpAdapter#destroyAll + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + destroyAll: function destroyAll(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.destroyAll.call(this, mapper, query, opts); + }, + + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error: function error() { + if (console) { + var _console; + + (_console = console)[typeof console.error === 'function' ? 'error' : 'log'].apply(_console, arguments); + } + }, + + + /** + * Make an Http request using `window.fetch`. + * + * @name HttpAdapter#fetch + * @method + * @param {object} config Request configuration. + * @param {object} config.data Payload for the request. + * @param {string} config.method Http method for the request. + * @param {object} config.headers Headers for the request. + * @param {object} config.params Querystring for the request. + * @param {string} config.url Url for the request. + */ + fetch: function (_fetch) { + function fetch(_x) { + return _fetch.apply(this, arguments); + } + + fetch.toString = function () { + return _fetch.toString(); + }; + + return fetch; + }(function (config) { + var requestConfig = { + method: config.method, + // turn the plain headers object into the Fetch Headers object + headers: new Headers(config.headers || {}) + }; + + if (config.data) { + requestConfig.body = jsData.utils.toJson(config.data); + } + + return fetch(buildUrl(config.url, config.params), requestConfig).then(function (response) { + response.config = { + method: config.method, + url: config.url + }; + return response.json().then(function (data) { + response.data = data; + return response; + }); + }); + }), - return endpoint; - }, - - - /** - * @name HttpAdapter#getPath - * @method - * @param {string} method The method being executed. - * @param {object} mapper The Mapper. - * @param {(string|number)?} id The primary key, if any. - * @param {object} opts Configuration options. - */ - getPath: function getPath(method, mapper, id, opts) { - opts || (opts = {}); - var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); - } - return makePath.apply(jsData.utils, args); - }, - getParams: function getParams(opts) { - opts || (opts = {}); - if (opts.params === undefined) { - return {}; + + /** + * Retrieve the record with the given primary key. + * + * @name HttpAdapter#find + * @method + * @param {object} mapper The mapper. + * @param {(string|number)} id Primary key of the record to retrieve. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + find: function find(mapper, id, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.find.call(this, mapper, id, opts); + }, + + + /** + * Retrieve the records that match the selection `query`. + * + * @name HttpAdapter#findAll + * @method + * @param {object} mapper The mapper. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + findAll: function findAll(mapper, query, opts) { + query || (query = {}); + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.findAll.call(this, mapper, query, opts); + }, + + + /** + * Make a GET request. + * + * @name HttpAdapter#GET + * @method + * @param {string} url The url for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + GET: function GET(url, config, opts) { + var _this13 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.method = config.method || 'get'; + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET'; + return jsData.utils.resolve(this[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'GET'; + _this13.dbg(op, url, config, opts); + return _this13.HTTP(config, opts); + }).then(function (response) { + // afterGET lifecycle hook + op = opts.op = 'afterGET'; + return jsData.utils.resolve(_this13[op](url, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {object} mapper The Mapper. + * @param {*} id The primary key, if any. + * @param {boolean} opts Configuration options. + * @return {string} Full path. + */ + getEndpoint: function getEndpoint(mapper, id, opts) { + var _this14 = this; + + opts || (opts = {}); + opts.params = jsData.utils.isUndefined(opts.params) ? {} : opts.params; + var relationList = mapper.relationList || []; + var endpoint = jsData.utils.isUndefined(opts.endpoint) ? jsData.utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint : opts.endpoint; + + relationList.forEach(function (def) { + if (def.type !== 'belongsTo' || !def.parent) { + return; } - return jsData.utils.copy(opts.params); - }, - getSuffix: function getSuffix(mapper, opts) { - opts || (opts = {}); - if (opts.suffix === undefined) { - if (mapper.suffix === undefined) { - return this.suffix; + var item = void 0; + var parentKey = def.foreignKey; + var parentDef = def.getRelation(); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; } - return mapper.suffix; - } - return opts.suffix; - }, - - - /** - * Make an Http request. - * - * @name HttpAdapter#HTTP - * @method - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - HTTP: function HTTP(config, opts) { - var _this15 = this; - - var start = new Date(); - opts || (opts = {}); - var payload = config.data; - var cache = config.cache; - var timeout = config.timeout; - config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); - config = jsData.utils.deepMixIn(config, this.httpConfig); - config.data = payload; - config.cache = cache; - config.timeout = timeout; - if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { - config.url += '/'; - } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || opts.suffix || this.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { - config.url += suffix; - } + return false; + } else { + delete opts.params[parentKey]; - var logResponse = function logResponse(data) { - var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - if (data.status >= 200 && data.status < 300) { - if (_this15.log) { - _this15.dbg(str, data); - } - return data; - } else { - if (_this15.error) { - _this15.error('\'FAILED: ' + str, data); - } - return jsData.utils.reject(data); + if (jsData.utils.isObject(id)) { + item = id; } - }; - if (!this.http) { - throw new Error('You have not configured this adapter with an http library!'); - } + if (item) { + parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? jsData.utils.get(def.getLocalField(item), parentDef.idAttribute) : null); + } - return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { - config = _config || config; - if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { - return _this15.fetch(config, opts).then(logResponse, logResponse); + if (parentId) { + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + jsData.utils._(_opts, parentDef); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return false; } - return _this15.http(config).then(logResponse, logResponse).catch(function (err) { - return _this15.responseError(err, config, opts); - }); - }).then(function (response) { - return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Make a POST request. - * - * @name HttpAdapter#POST - * @method - * @param {*} url The url for the request. - * @param {object} data Payload for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - POST: function POST(url, data, config, opts) { - var _this16 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'post'; - - // beforePOST lifecycle hook - op = opts.op = 'beforePOST'; - return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'POST'; - _this16.dbg(op, url, data, config, opts); - return _this16.HTTP(config, opts); - }).then(function (response) { - // afterPOST lifecycle hook - op = opts.op = 'afterPOST'; - return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Make a PUT request. - * - * @name HttpAdapter#PUT - * @method - * @param {*} url The url for the request. - * @param {object} data Payload for the request. - * @param {object} config Request configuration options. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - PUT: function PUT(url, data, config, opts) { - var _this17 = this; - - var op = void 0; - config || (config = {}); - opts || (opts = {}); - config.url = url || config.url; - config.data = data || config.data; - config.method = config.method || 'put'; - - // beforePUT lifecycle hook - op = opts.op = 'beforePUT'; - return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { - // Allow re-assignment from lifecycle hook - config = _config === undefined ? config : _config; - op = opts.op = 'PUT'; - _this17.dbg(op, url, data, config, opts); - return _this17.HTTP(config, opts); - }).then(function (response) { - // afterPUT lifecycle hook - op = opts.op = 'afterPUT'; - return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { - return _response === undefined ? response : _response; - }); - }); - }, - - - /** - * Transform the querystring object before it is serialized. This doesn't do - * anything by default. - * - * @name HttpAdapter#queryTransform - * @method - * @param {object} mapper The Mapper that triggered the request. - * @param {*} params The querystring object. - * @param {*} opts Configuration options - * @return {*} Transformed params. - */ - queryTransform: function queryTransform(mapper, params, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.queryTransform)) { - return opts.queryTransform(mapper, params, opts); - } - if (jsData.utils.isFunction(mapper.queryTransform)) { - return mapper.queryTransform(mapper, params, opts); } - return params; - }, - - - /** - * Error handler invoked when the promise returned by {@link HttpAdapter#http} - * is rejected. Default implementation is to just return the error wrapped in - * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is - * called by {@link HttpAdapter#HTTP}. - * - * @name HttpAdapter#responseError - * @method - * @param {*} err The error that {@link HttpAdapter#http} rejected with. - * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. - * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. - * @return {Promise} - */ - responseError: function responseError(err, config, opts) { - return jsData.utils.reject(err); - }, - - - /** - * Serialize request data. This doesn't do anything by default. - * - * @name HttpAdapter#serialize - * @method - * @param {object} mapper The Mapper that triggered the request. - * @param {object} data The request payload. - * @param {*} opts Configuration options. - * @return {*} Serialized data. - */ - serialize: function serialize(mapper, data, opts) { - opts || (opts = {}); - if (jsData.utils.isFunction(opts.serialize)) { - return opts.serialize(mapper, data, opts); - } - if (jsData.utils.isFunction(mapper.serialize)) { - return mapper.serialize(mapper, data, opts); - } - return data; - }, - - - /** - * Retrieve the sum of the field of the records that match the selection query. - * - * @name HttpAdapter#sum - * @method - * @param {object} mapper The mapper. - * @param {string} field The field to sum. - * @param {object} query Selection query. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - sum: function sum(mapper, field, query, opts) { - query || (query = {}); - opts || (opts = {}); - if (!jsData.utils.isString(field)) { - throw new Error('field must be a string!'); + }); + + return endpoint; + }, + + + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method The method being executed. + * @param {object} mapper The Mapper. + * @param {(string|number)?} id The primary key, if any. + * @param {object} opts Configuration options. + */ + getPath: function getPath(method, mapper, id, opts) { + opts || (opts = {}); + var args = [opts.basePath === undefined ? mapper.basePath === undefined ? this.basePath : mapper.basePath : opts.basePath, this.getEndpoint(mapper, jsData.utils.isString(id) || jsData.utils.isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); + } + return makePath.apply(jsData.utils, args); + }, + getParams: function getParams(opts) { + opts || (opts = {}); + if (opts.params === undefined) { + return {}; + } + return jsData.utils.copy(opts.params); + }, + getSuffix: function getSuffix(mapper, opts) { + opts || (opts = {}); + if (opts.suffix === undefined) { + if (mapper.suffix === undefined) { + return this.suffix; } - opts.params = this.getParams(opts); - opts.params.sum = field; - opts.suffix = this.getSuffix(mapper, opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - return Adapter.prototype.sum.call(this, mapper, field, query, opts); - }, - - - /** - * Perform an update. Makes a PUT request by default. - * - * @name HttpAdapter#update - * @method - * @param {object} mapper The Mapper for the request. - * @param {*} id The primary key of the record being updated. - * @param {*} props The update payload. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - update: function update(mapper, id, props, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.update.call(this, mapper, id, props, opts); - }, - - - /** - * Perform an update against records that match the selection query. Makes a - * PUT request by default. - * - * @name HttpAdapter#updateAll - * @method - * @param {object} mapper The Mapper for the request. - * @param {object} props The update payload. - * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. - * @param {object} [opts] Configuration options. - * @return {Promise} - */ - updateAll: function updateAll(mapper, props, query, opts) { - query || (query = {}); - opts || (opts = {}); - opts.params = this.getParams(opts); - jsData.utils.deepMixIn(opts.params, query); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); - }, - - - /** - * Update multiple individual records in a batch. - * - * @name HttpAdapter#updateMany - * @method - * @param {object} mapper The Mapper for the request. - * @param {array} records Array of property objects to send as the payload. - * Each must contain the primary key of the record to be updated. - * @param {object} [opts] Configuration options. - * @param {string} [opts.params] Querystring parameters. - * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. - * @return {Promise} - */ - updateMany: function updateMany(mapper, records, opts) { - opts || (opts = {}); - opts.params = this.getParams(opts); - opts.params = this.queryTransform(mapper, opts.params, opts); - opts.suffix = this.getSuffix(mapper, opts); - return Adapter.prototype.updateMany.call(this, mapper, records, opts); + return mapper.suffix; } - }); + return opts.suffix; + }, + /** - * Add an Http actions to a mapper. - * - * @example - * // CommonJS - * var JSData = require('js-data'); - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore; - * - * var JSDataHttp = require('js-data-http'); - * var HttpAdapter = JSDataHttp.HttpAdapter; - * var addAction = JSDataHttp.addAction; - * - * var httpAdapter = new HttpAdapter(); - * var store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * store.defineMapper('school'); + * Make an Http request. * - * // GET /reports/schools/:school_id/teachers - * addAction('getTeacherReports', { - * endpoint: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * })(store.getMapper('school')); - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then((response) => { - * // ... - * }); - * - * @name module:js-data-http.addAction - * @method - * @param {string} name Name of the new action. - * @param {object} [opts] Action configuration - * @param {string} [opts.adapter="http"] The name of the adapter to use. - * @param {string} [opts.pathname] Set the action's pathname. - * @param {function} [opts.request] Specify a request handler to be executed - * before the request is made. - * @param {function} [opts.response] Specify a response handler to be executed - * after the response is received. - * @param {function} [opts.responseError] Specify an error handler to be - * executed on error. - * @return {function} Decoration function, which should be passed the mapper to - * decorate when invoked. - */ - function addAction(name, opts) { - if (!name || !jsData.utils.isString(name)) { - throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + * @name HttpAdapter#HTTP + * @method + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + HTTP: function HTTP(config, opts) { + var _this15 = this; + + var start = new Date(); + opts || (opts = {}); + var payload = config.data; + var cache = config.cache; + var timeout = config.timeout; + config = jsData.utils.copy(config, null, null, null, ['data', 'cache', 'timeout']); + config = jsData.utils.deepMixIn(config, this.httpConfig); + config.data = payload; + config.cache = cache; + if (timeout !== undefined) { + config.timeout = timeout; + } + if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { + config.url += '/'; + } + config.method = config.method.toUpperCase(); + var suffix = config.suffix || opts.suffix || this.suffix; + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { + config.url += suffix; } - return function (mapper) { - if (mapper[name]) { - throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); - } - opts.request = opts.request || function (config) { - return config; - }; - opts.response = opts.response || function (response) { - return response; - }; - opts.responseError = opts.responseError || function (err) { - return jsData.utils.reject(err); - }; - mapper[name] = function (id, _opts) { - var _this18 = this; - _opts = _opts || {}; - if (jsData.utils.isObject(id)) { - _opts = id; + var logResponse = function logResponse(data) { + var str = start.toUTCString() + ' - ' + config.method.toUpperCase() + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; + if (data.status >= 200 && data.status < 300) { + if (_this15.log) { + _this15.dbg(str, data); } - jsData.utils.fillIn(_opts, opts); - var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); - var config = {}; - config.mapper = this.name; - jsData.utils.deepMixIn(config, _opts); - config.method = config.method || 'GET'; - if (typeof _opts.getEndpoint === 'function') { - config.url = _opts.getEndpoint(this, _opts); - } else { - var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; - if (jsData.utils.isSorN(id)) { - args.push(id); - } - args.push(opts.pathname || name); - config.url = makePath.apply(null, args); + return data; + } else { + if (_this15.error) { + _this15.error('\'FAILED: ' + str, data); } - return jsData.utils.resolve(config).then(_opts.request).then(function (config) { - return adapter.HTTP(config); - }).then(function (data) { - if (data && data.config) { - data.config.mapper = _this18.name; - } - return data; - }).then(_opts.response, _opts.responseError); - }; - return mapper; + return jsData.utils.reject(data); + } }; - } + + if (!this.http) { + if (this.useFetch || opts.useFetch) { + if (!hasFetch) { + throw new Error('Attempting to use window.fetch, but it is not available!'); + } + } else { + throw new Error('You have not configured this adapter with an http library!'); + } + } + + return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { + config = _config || config; + if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { + return _this15.fetch(config, opts).then(logResponse, logResponse); + } + var httpConfig = jsData.utils.plainCopy(config); + delete httpConfig.adapter; + return _this15.http(httpConfig).then(logResponse, logResponse).catch(function (err) { + return _this15.responseError(err, config, opts); + }); + }).then(function (response) { + return jsData.utils.resolve(_this15.afterHTTP(config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + /** - * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for - * action configuration options. + * Make a POST request. * - * @example - * // CommonJS - * var JSData = require('js-data'); - * // It is recommended to use DataStore in the browser - * var DataStore = JSData.DataStore; + * @name HttpAdapter#POST + * @method + * @param {*} url The url for the request. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + POST: function POST(url, data, config, opts) { + var _this16 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'post'; + + // beforePOST lifecycle hook + op = opts.op = 'beforePOST'; + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'POST'; + _this16.dbg(op, url, data, config, opts); + return _this16.HTTP(config, opts); + }).then(function (response) { + // afterPOST lifecycle hook + op = opts.op = 'afterPOST'; + return jsData.utils.resolve(_this16[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Make a PUT request. + * + * @name HttpAdapter#PUT + * @method + * @param {*} url The url for the request. + * @param {object} data Payload for the request. + * @param {object} config Request configuration options. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + PUT: function PUT(url, data, config, opts) { + var _this17 = this; + + var op = void 0; + config || (config = {}); + opts || (opts = {}); + config.url = url || config.url; + config.data = data || config.data; + config.method = config.method || 'put'; + + // beforePUT lifecycle hook + op = opts.op = 'beforePUT'; + return jsData.utils.resolve(this[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = _config === undefined ? config : _config; + op = opts.op = 'PUT'; + _this17.dbg(op, url, data, config, opts); + return _this17.HTTP(config, opts); + }).then(function (response) { + // afterPUT lifecycle hook + op = opts.op = 'afterPUT'; + return jsData.utils.resolve(_this17[op](url, data, config, opts, response)).then(function (_response) { + return _response === undefined ? response : _response; + }); + }); + }, + + + /** + * Transform the querystring object before it is serialized. This doesn't do + * anything by default. + * + * @name HttpAdapter#queryTransform + * @method + * @param {object} mapper The Mapper that triggered the request. + * @param {*} params The querystring object. + * @param {*} opts Configuration options + * @return {*} Transformed params. + */ + queryTransform: function queryTransform(mapper, params, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts); + } + if (jsData.utils.isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts); + } + return params; + }, + + + /** + * Error handler invoked when the promise returned by {@link HttpAdapter#http} + * is rejected. Default implementation is to just return the error wrapped in + * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is + * called by {@link HttpAdapter#HTTP}. * - * var JSDataHttp = require('js-data-http'); - * var HttpAdapter = JSDataHttp.HttpAdapter; - * var addActions = JSDataHttp.addActions; + * @name HttpAdapter#responseError + * @method + * @param {*} err The error that {@link HttpAdapter#http} rejected with. + * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}. + * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}. + * @return {Promise} + */ + responseError: function responseError(err, config, opts) { + return jsData.utils.reject(err); + }, + + + /** + * Serialize request data. This doesn't do anything by default. * - * var httpAdapter = new HttpAdapter(); - * var store = new DataStore(); + * @name HttpAdapter#serialize + * @method + * @param {object} mapper The Mapper that triggered the request. + * @param {object} data The request payload. + * @param {*} opts Configuration options. + * @return {*} Serialized data. + */ + serialize: function serialize(mapper, data, opts) { + opts || (opts = {}); + if (jsData.utils.isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts); + } + if (jsData.utils.isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts); + } + return data; + }, + + + /** + * Retrieve the sum of the field of the records that match the selection query. * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * store.defineMapper('school'); + * @name HttpAdapter#sum + * @method + * @param {object} mapper The mapper. + * @param {string} field The field to sum. + * @param {object} query Selection query. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + sum: function sum(mapper, field, query, opts) { + query || (query = {}); + opts || (opts = {}); + if (!jsData.utils.isString(field)) { + throw new Error('field must be a string!'); + } + opts.params = this.getParams(opts); + opts.params.sum = field; + opts.suffix = this.getSuffix(mapper, opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + return Adapter.prototype.sum.call(this, mapper, field, query, opts); + }, + + + /** + * Perform an update. Makes a PUT request by default. * - * addActions({ - * // GET /reports/schools/:school_id/teachers - * getTeacherReports: { - * basePath: 'reports/schools', - * pathname: 'teachers', - * method: 'GET' - * } - * })(store.getMapper('school')); - * - * // /reports/schools/1234/teachers - * store.getMapper('school').getTeacherReports(1234).then((response) => { - * // ... - * }); + * @name HttpAdapter#update + * @method + * @param {object} mapper The Mapper for the request. + * @param {*} id The primary key of the record being updated. + * @param {*} props The update payload. + * @param {object} [opts] Configuration options. + * @return {Promise} + */ + update: function update(mapper, id, props, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.update.call(this, mapper, id, props, opts); + }, + + + /** + * Perform an update against records that match the selection query. Makes a + * PUT request by default. * - * @name module:js-data-http.addActions + * @name HttpAdapter#updateAll * @method - * @param {object.} opts Object where the key is an action name - * and the value is the configuration for the action. - * @return {function} Decoration function, which should be passed the mapper to - * decorate when invoked. + * @param {object} mapper The Mapper for the request. + * @param {object} props The update payload. + * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}. + * @param {object} [opts] Configuration options. + * @return {Promise} */ - function addActions(opts) { + updateAll: function updateAll(mapper, props, query, opts) { + query || (query = {}); opts || (opts = {}); - return function (mapper) { - jsData.utils.forOwn(opts, function (value, key) { - addAction(key, value)(mapper); - }); - return mapper; - }; - } + opts.params = this.getParams(opts); + jsData.utils.deepMixIn(opts.params, query); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateAll.call(this, mapper, props, query, opts); + }, + /** - * Details of the current version of the `js-data-http` module. + * Update multiple individual records in a batch. * - * @name module:js-data-http.version - * @type {object} - * @property {string} version.full The full semver value. - * @property {number} version.major The major version number. - * @property {number} version.minor The minor version number. - * @property {number} version.patch The patch version number. - * @property {(string|boolean)} version.alpha The alpha version value, - * otherwise `false` if the current version is not alpha. - * @property {(string|boolean)} version.beta The beta version value, - * otherwise `false` if the current version is not beta. - */ - var version = { - full: '3.0.0-rc.3', + * @name HttpAdapter#updateMany + * @method + * @param {object} mapper The Mapper for the request. + * @param {array} records Array of property objects to send as the payload. + * Each must contain the primary key of the record to be updated. + * @param {object} [opts] Configuration options. + * @param {string} [opts.params] Querystring parameters. + * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}. + * @return {Promise} + */ + updateMany: function updateMany(mapper, records, opts) { + opts || (opts = {}); + opts.params = this.getParams(opts); + opts.params = this.queryTransform(mapper, opts.params, opts); + opts.suffix = this.getSuffix(mapper, opts); + return Adapter.prototype.updateMany.call(this, mapper, records, opts); + } +}); + +/** + * Add an Http actions to a mapper. + * + * @example + * // CommonJS + * var JSData = require('js-data'); + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore; + * + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addAction = JSDataHttp.addAction; + * + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); + * + * // GET /reports/schools/:school_id/teachers + * addAction('getTeacherReports', { + * endpoint: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * })(store.getMapper('school')); + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then((response) => { + * // ... + * }); + * + * @name module:js-data-http.addAction + * @method + * @param {string} name Name of the new action. + * @param {object} [opts] Action configuration + * @param {string} [opts.adapter="http"] The name of the adapter to use. + * @param {string} [opts.pathname] Set the action's pathname. + * @param {function} [opts.request] Specify a request handler to be executed + * before the request is made. + * @param {function} [opts.response] Specify a response handler to be executed + * after the response is received. + * @param {function} [opts.responseError] Specify an error handler to be + * executed on error. + * @return {function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addAction(name, opts) { + if (!name || !jsData.utils.isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name))); + } + return function (mapper) { + if (mapper[name]) { + throw new Error('action(name[, opts]): ' + name + ' already exists on target!'); + } + opts.request = opts.request || function (config) { + return config; + }; + opts.response = opts.response || function (response) { + return response; + }; + opts.responseError = opts.responseError || function (err) { + return jsData.utils.reject(err); + }; + mapper[name] = function (id, _opts) { + var _this18 = this; + + _opts = _opts || {}; + if (jsData.utils.isObject(id)) { + _opts = id; + } + jsData.utils.fillIn(_opts, opts); + var adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http'); + var config = {}; + config.mapper = this.name; + jsData.utils.deepMixIn(config, _opts); + config.method = config.method || 'GET'; + if (typeof _opts.getEndpoint === 'function') { + config.url = _opts.getEndpoint(this, _opts); + } else { + var args = [_opts.basePath || this.basePath || adapter.basePath, adapter.getEndpoint(this, id, _opts)]; + if (jsData.utils.isSorN(id)) { + args.push(id); + } + args.push(opts.pathname || name); + config.url = makePath.apply(null, args); + } + return jsData.utils.resolve(config).then(_opts.request).then(function (config) { + return adapter.HTTP(config); + }).then(function (data) { + if (data && data.config) { + data.config.mapper = _this18.name; + } + return data; + }).then(_opts.response, _opts.responseError); + }; + return mapper; + }; +} + +/** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @example + * // CommonJS + * var JSData = require('js-data'); + * // It is recommended to use DataStore in the browser + * var DataStore = JSData.DataStore; + * + * var JSDataHttp = require('js-data-http'); + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var addActions = JSDataHttp.addActions; + * + * var httpAdapter = new HttpAdapter(); + * var store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * store.defineMapper('school'); + * + * addActions({ + * // GET /reports/schools/:school_id/teachers + * getTeacherReports: { + * basePath: 'reports/schools', + * pathname: 'teachers', + * method: 'GET' + * } + * })(store.getMapper('school')); + * + * // /reports/schools/1234/teachers + * store.getMapper('school').getTeacherReports(1234).then((response) => { + * // ... + * }); + * + * @name module:js-data-http.addActions + * @method + * @param {object.} opts Object where the key is an action name + * and the value is the configuration for the action. + * @return {function} Decoration function, which should be passed the mapper to + * decorate when invoked. + */ +function addActions(opts) { + opts || (opts = {}); + return function (mapper) { + jsData.utils.forOwn(opts, function (value, key) { + addAction(key, value)(mapper); + }); + return mapper; + }; +} + +/** + * Details of the current version of the `js-data-http` module. + * + * @name module:js-data-http.version + * @type {object} + * @property {string} version.full The full semver value. + * @property {number} version.major The major version number. + * @property {number} version.minor The minor version number. + * @property {number} version.patch The patch version number. + * @property {(string|boolean)} version.alpha The alpha version value, + * otherwise `false` if the current version is not alpha. + * @property {(string|boolean)} version.beta The beta version value, + * otherwise `false` if the current version is not beta. + */ +var version = { + full: '3.0.0', major: 3, minor: 0, patch: 0 }; - exports.HttpAdapter = HttpAdapter; - exports.addAction = addAction; - exports.addActions = addActions; - exports.version = version; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); +/** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example ES2015 Modules + * import { HttpAdapter } from 'js-data-Http'; + * const httpAdapter = new HttpAdapter(); + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * // ... + * }); + * + * @module js-data-http + */ + +/** + * Create a subclass of this HttpAdapter: + * @example HttpAdapter.extend + * // Normally you would do: import { HttpAdapter } from 'js-data-http'; + * // or: import { HttpAdapter } from 'js-data-http-node'; + * const JSDataHttp = require('js-data-http-node'); + * const { HttpAdapter } = JSDataHttp; + * console.log('Using JSDataHttp v' + JSDataHttp.version.full); + * + * // Extend the class using ES2015 class syntax. + * class CustomHttpAdapterClass extends HttpAdapter { + * foo () { return 'bar'; } + * static beep () { return 'boop'; } + * } + * const customHttpAdapter = new CustomHttpAdapterClass(); + * console.log(customHttpAdapter.foo()); + * console.log(CustomHttpAdapterClass.beep()); + * + * // Extend the class using alternate method. + * const OtherHttpAdapterClass = HttpAdapter.extend({ + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const otherHttpAdapter = new OtherHttpAdapterClass(); + * console.log(otherHttpAdapter.foo()); + * console.log(OtherHttpAdapterClass.beep()); + * + * // Extend the class, providing a custom constructor. + * function AnotherHttpAdapterClass () { + * HttpAdapter.call(this); + * this.created_at = new Date().getTime(); + * } + * HttpAdapter.extend({ + * constructor: AnotherHttpAdapterClass, + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const anotherHttpAdapter = new AnotherHttpAdapterClass(); + * console.log(anotherHttpAdapter.created_at); + * console.log(anotherHttpAdapter.foo()); + * console.log(AnotherHttpAdapterClass.beep()); + * + * @method HttpAdapter.extend + * @param {object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this HttpAdapter class. + * @since 3.0.0 + */ + +exports.HttpAdapter = HttpAdapter; +exports.addAction = addAction; +exports.addActions = addActions; +exports.version = version; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); //# sourceMappingURL=js-data-fetch.js.map diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index 0464131..2286e14 100644 --- a/fetch/dist/js-data-fetch.js.map +++ b/fetch/dist/js-data-fetch.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import {Component, utils} from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let record, op\n let meta = {}\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => {\n let [_record, _meta] = results\n if (!_record) {\n return\n }\n record = _record\n meta = _meta\n const tasks = []\n\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, record, __opts)\n } else {\n task = this.loadHasMany(mapper, def, record, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, record, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, record, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, record, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n let records = []\n let meta = {}\n let op\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => {\n let [_records, _meta] = results\n _records || (_records = [])\n records = _records\n meta = _meta\n const tasks = []\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasMany') {\n task = this.loadHasMany(mapper, def, records, __opts)\n } else {\n task = this.loadHasOne(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n return utils.Promise.all(tasks)\n })\n .then(() => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","DEFAULTS","Component"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEO,IAAM,OAAO,SAAP,IAAO,GAAmB;AAAA,EAAA,oCAAN,IAAM;AAAN,EAAA,QAAM;AAAA,EAAA;;AACrC,EAAA,MAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAnB,CAAb;AACA,EAAA,OAAK,GAAL,cAAS,KAAK,EAAd,SAAqB,IAArB;AACA,EAAA,SAAOA,aAAM,OAAN,EAAP;AACD,EAAA,CAJM;;AAMP,AAAO,EAAA,IAAM,QAAQ,SAAR,KAAQ,GAAmB;AAAA,EAAA,qCAAN,IAAM;AAAN,EAAA,QAAM;AAAA,EAAA;;AACtC,EAAA,MAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAnB,CAAb;AACA,EAAA,OAAK,GAAL,cAAS,KAAK,EAAd,SAAqB,IAArB;AACA,EAAA,SAAOA,aAAM,OAAN,EAAP;AACD,EAAA,CAJM;;AAMP,AAAO,EAAA,IAAM,SAAS,SAAT,MAAS,CAAU,KAAV,EAAiB;AACrC,EAAA,MAAM,OAAO,EAAb;AACA,EAAA,MAAM,QAAQ,EAAd;AACA,EAAA,QAAM,OAAN,CAAc,UAAU,IAAV,EAAgB;AAC5B,EAAA,QAAI,QAAQ,IAAZ,EAAkB;AAChB,EAAA;AACD,EAAA;AACD,EAAA,UAAM,IAAN,CAAW,IAAX;AACA,EAAA,SAAK,IAAL,IAAa,CAAb;AACD,EAAA,GAND;AAOA,EAAA,SAAO,KAAP;AACD,EAAA,CAXM;;AAaP,AAAO,EAAA,IAAM,mBAAmB,SAAnB,gBAAmB,CAAU,MAAV,EAAkB,KAAlB,EAAyB,IAAzB,EAA+B;AAC7D,EAAA,WAAS,OAAO,EAAhB;AACA,EAAA,OAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;AACA,EAAA,MAAM,iBAAiB,OAAO,cAAP,IAAyB,EAAhD;AACA,EAAA,MAAM,UAAU,eAAe,MAAf,CAAsB,UAAC,KAAD;AAAA,EAAA,WAAW,KAAK,IAAL,CAAU,OAAV,CAAkB,KAAlB,MAA6B,CAAC,CAAzC;AAAA,EAAA,GAAtB,CAAhB;AACA,EAAA,SAAOA,aAAM,IAAN,CAAW,KAAX,EAAkB,OAAlB,CAAP;AACD,EAAA,CANM;;AAQP,AASA,EAAA;;;;;;AAMA,AAAO,EAAA,SAAS,QAAT,CAAmB,IAAnB,EAAyB,IAAzB,EAA+B,EAA/B,EAAmC;AACxC,EAAA,WAAS,OAAO,EAAhB;;AAEA,EAAA;;;;;;AAMA,EAAA,OAAK,IAAL,GAAY,IAAZ;;AAEA,EAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,IAAnB;;AAEA,EAAA;;;;;;AAMA,EAAA,OAAK,EAAL,GAAU,EAAV;AACD,EAAA;;AAED,EAAA,IAAMC,aAAW;AACf,EAAA;;;;;;;AAOA,EAAA,SAAO,KARQ;;AAUf,EAAA;;;;;;;AAOA,EAAA,OAAK;AAjBU,EAAA,CAAjB;;AAoBA,EAAA;;;;;;;;;;;AAWA,AAAO,EAAA,SAAS,OAAT,CAAkB,IAAlB,EAAwB;AAC7B,EAAA,eAAM,cAAN,CAAqB,IAArB,EAA2B,OAA3B;AACA,EAAA,mBAAU,IAAV,CAAe,IAAf,EAAqB,IAArB;AACA,EAAA,WAAS,OAAO,EAAhB;AACA,EAAA,eAAM,MAAN,CAAa,IAAb,EAAmBA,UAAnB;AACA,EAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,IAAnB;AACD,EAAA;;AAEDC,mBAAU,MAAV,CAAiB;AACf,EAAA,eAAa,OADE;;AAGf,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,cAAY,KAxBG;;AA0Bf,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,eAAa,KA/CE;;AAiDf,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,mBAAiB,KAtEF;;AAwEf,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,gBAAc,KA7FC;;AA+Ff,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,mBAAiB,KApHF;;AAsHf,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,aAAW,KA3II;;AA6If,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,gBAAc,KAlKC;;AAoKf,EAAA;;;;;;;;;;;;;;;;;;;;;;AAsBA,EAAA,YAAU,KA1LK;;AA4Lf,EAAA;;;;;;;;;;;;;;;;;;;;;;AAsBA,EAAA,eAAa,KAlNE;;AAoNf,EAAA;;;;;;;;;;;;;;;;;;;;;;AAsBA,EAAA,kBAAgB,KA1OD;;AA4Of,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,EAAA,mBAAiB,KAjQF;;AAmQf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,eAAa,IAnRE;;AAqRf,EAAA;;;;;;;;;;;;;;;;;;AAkBA,EAAA,gBAAc,IAvSC;;AAySf,EAAA;;;;;;;;;;;;;;;;;;AAkBA,EAAA,oBAAkB,IA3TH;;AA6Tf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,iBAAe,IA7UA;;AA+Uf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,oBAAkB,IA/VH;;AAiWf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,cAAY,IAjXG;;AAmXf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,iBAAe,IAnYA;;AAqYf,EAAA;;;;;;;;;;;;;;;;AAgBA,EAAA,aAAW,IArZI;;AAuZf,EAAA;;;;;;;;;;;;;;;;;;;AAmBA,EAAA,gBAAc,IA1aC;;AA4af,EAAA;;;;;;;;;;;;;;;;;;;AAmBA,EAAA,mBAAiB,IA/bF;;AAicf,EAAA;;;;;;;;;;;;;;;;;;AAkBA,EAAA,oBAAkB,IAndH;;AAqdf,EAAA;;;;;;;;;;;;;;;;;;;AAmBA,EAAA,OAxee,iBAweR,MAxeQ,EAweA,KAxeA,EAweO,IAxeP,EAwea;AAAA,EAAA;;AAC1B,EAAA,QAAI,WAAJ;AACA,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,aAAf;AACA,EAAA,WAAOF,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,OAAf;AACA,EAAA,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,MAAK,MAAL,CAAY,MAAZ,EAAoB,KAApB,EAA2B,IAA3B,CAAd,CAAP;AACD,EAAA,KANI,EAOJ,IAPI,CAOC,UAAC,OAAD,EAAa;AAAA,EAAA,mCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,EAA3B,CAAf;AACA,EAAA,iBAAW,MAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,MAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAjBI,CAAP;AAkBD,EAAA,GAjgBc;;;AAmgBf,EAAA;;;;;;;;;;;;AAYA,EAAA,QA/gBe,kBA+gBP,MA/gBO,EA+gBC,KA/gBD,EA+gBQ,IA/gBR,EA+gBc;AAAA,EAAA;;AAC3B,EAAA,QAAI,WAAJ;AACA,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,cAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;AAChB,EAAA;AACA,EAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,EAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,QAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,OAAL,CAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B,CAAd,CAAP;AACD,EAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,QAA3B,CAAf;AACA,EAAA,eAAS,OAAT,GAAmB,OAAO,CAAP,GAAW,CAA9B;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,aAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KApBI,CAAP;AAqBD,EAAA,GA3iBc;;;AA6iBf,EAAA;;;;;;;;;;;;AAYA,EAAA,YAzjBe,sBAyjBH,MAzjBG,EAyjBK,KAzjBL,EAyjBY,IAzjBZ,EAyjBkB;AAAA,EAAA;;AAC/B,EAAA,QAAI,WAAJ;AACA,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;AAChB,EAAA;AACA,EAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,EAAA,cAAQ,MAAM,GAAN,CAAU,UAAC,MAAD;AAAA,EAAA,eAAY,iBAAiB,MAAjB,EAAyB,MAAzB,EAAiC,IAAjC,CAAZ;AAAA,EAAA,OAAV,CAAR;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,WAAL,CAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,EAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,eAAS,OAAO,EAAhB;AACA,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,EAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KArBI,CAAP;AAsBD,EAAA,GAtlBc;;;AAwlBf,EAAA;;;;;;;;;;;;;AAaA,EAAA,SArmBe,mBAqmBN,MArmBM,EAqmBE,EArmBF,EAqmBM,IArmBN,EAqmBY;AAAA,EAAA;;AACzB,EAAA,QAAI,WAAJ;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,eAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA,WAAK,KAAK,EAAL,GAAU,SAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,QAAL,CAAc,MAAd,EAAsB,EAAtB,EAA0B,IAA1B,CAAd,CAAP;AACD,EAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,SAA3B,CAAf;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,cAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,QAA3B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAhBI,CAAP;AAiBD,EAAA,GA5nBc;;;AA8nBf,EAAA;;;;;;;;;;;;;;;;;;;AAmBA,EAAA,YAjpBe,sBAipBH,MAjpBG,EAipBK,KAjpBL,EAipBY,IAjpBZ,EAipBkB;AAAA,EAAA;;AAC/B,EAAA,QAAI,WAAJ;AACA,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,WAAL,CAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,EAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAhBI,CAAP;AAiBD,EAAA,GAzqBc;;;AA2qBf,EAAA;;;;;;;;;AASA,EAAA,eAprBe,yBAorBA,MAprBA,EAorBQ,GAprBR,EAorBa,OAprBb,EAorBsB,MAprBtB,EAorB8B;AAAA,EAAA;;AAC3C,EAAA,QAAM,cAAc,IAAI,WAAJ,EAApB;;AAEA,EAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AAAA,EAAA;AACtD,EAAA,YAAM,SAAS,OAAf;AACA,EAAA;AAAA,EAAA,aAAO,OAAK,IAAL,CAAU,WAAV,EAAuB,OAAK,uBAAL,CAA6B,MAA7B,EAAqC,GAArC,EAA0C,MAA1C,CAAvB,EAA0E,MAA1E,EACJ,IADI,CACC,UAAC,WAAD,EAAiB;AACrB,EAAA,gBAAI,aAAJ,CAAkB,MAAlB,EAA0B,WAA1B;AACD,EAAA,WAHI;AAAP,EAAA;AAFsD,EAAA;;AAAA,EAAA;AAMvD,EAAA,KAND,MAMO;AACL,EAAA,UAAM,OAAO,QACV,GADU,CACN,UAAC,MAAD;AAAA,EAAA,eAAY,OAAK,uBAAL,CAA6B,MAA7B,EAAqC,GAArC,EAA0C,MAA1C,CAAZ;AAAA,EAAA,OADM,EAEV,MAFU,CAEH,UAAC,GAAD;AAAA,EAAA,eAAS,GAAT;AAAA,EAAA,OAFG,CAAb;AAGA,EAAA,aAAO,KAAK,OAAL,CAAa,WAAb,EAA0B;AAC/B,EAAA,kCACG,YAAY,WADf,EAC6B;AACzB,EAAA,gBAAM;AADmB,EAAA,SAD7B;AAD+B,EAAA,OAA1B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,EAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,EAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,EAAA,gBAAI,YAAY,YAAY,WAAxB,MAAyC,OAAO,IAAI,UAAX,CAA7C,EAAqE;AACnE,EAAA,kBAAI,aAAJ,CAAkB,MAAlB,EAA0B,WAA1B;AACD,EAAA;AACF,EAAA,WAJD;AAKD,EAAA,SAND;AAOD,EAAA,OAdM,CAAP;AAeD,EAAA;AACF,EAAA,GAjtBc;;;AAmtBf,EAAA;;;;;;;;;;;;;AAaA,EAAA,MAhuBe,gBAguBT,MAhuBS,EAguBD,EAhuBC,EAguBG,IAhuBH,EAguBS;AAAA,EAAA;;AACtB,EAAA,QAAI,eAAJ;AAAA,EAAA,QAAY,WAAZ;AACA,EAAA,QAAI,OAAO,EAAX;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA,WAAK,KAAK,EAAL,GAAU,MAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,KAAL,CAAW,MAAX,EAAmB,EAAnB,EAAuB,IAAvB,CAAd,CAAP;AACD,EAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACM,OADN;;AAAA,EAAA,UACZ,OADY;AAAA,EAAA,UACH,KADG;;AAEjB,EAAA,UAAI,CAAC,OAAL,EAAc;AACZ,EAAA;AACD,EAAA;AACD,EAAA,eAAS,OAAT;AACA,EAAA,aAAO,KAAP;AACA,EAAA,UAAM,QAAQ,EAAd;;AAEA,EAAA,mBAAM,eAAN,CAAsB,MAAtB,EAA8B,IAA9B,EAAoC,UAAC,GAAD,EAAM,MAAN,EAAiB;AACnD,EAAA,YAAI,aAAJ;AACA,EAAA,YAAI,IAAI,UAAJ,KAAmB,IAAI,IAAJ,KAAa,QAAb,IAAyB,IAAI,IAAJ,KAAa,SAAzD,CAAJ,EAAyE;AACvE,EAAA,cAAI,IAAI,IAAJ,KAAa,QAAjB,EAA2B;AACzB,EAAA,mBAAO,OAAK,UAAL,CAAgB,MAAhB,EAAwB,GAAxB,EAA6B,MAA7B,EAAqC,MAArC,CAAP;AACD,EAAA,WAFD,MAEO;AACL,EAAA,mBAAO,OAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,MAA9B,EAAsC,MAAtC,CAAP;AACD,EAAA;AACF,EAAA,SAND,MAMO,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,SAAlC,EAA6C;AAClD,EAAA,iBAAO,OAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC,EAA+C,MAA/C,CAAP;AACD,EAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,WAAlC,EAA+C;AACpD,EAAA,iBAAO,OAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC,EAAiD,MAAjD,CAAP;AACD,EAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,WAAjB,EAA8B;AACnC,EAAA,iBAAO,OAAK,aAAL,CAAmB,MAAnB,EAA2B,GAA3B,EAAgC,MAAhC,EAAwC,MAAxC,CAAP;AACD,EAAA;AACD,EAAA,YAAI,IAAJ,EAAU;AACR,EAAA,gBAAM,IAAN,CAAW,IAAX;AACD,EAAA;AACF,EAAA,OAlBD;;AAoBA,EAAA,aAAOA,aAAM,OAAN,CAAc,GAAd,CAAkB,KAAlB,CAAP;AACD,EAAA,KApCI,EAqCJ,IArCI,CAqCC,YAAM;AACV,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,MAAb,EAAqB,IAArB,EAA2B,MAA3B,CAAf;AACA,EAAA,eAAS,KAAT,GAAiB,SAAS,CAAT,GAAa,CAA9B;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,QAA3B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KA9CI,CAAP;AA+CD,EAAA,GAvxBc;;;AAyxBf,EAAA;;;;;;;;;;;;;;;;;;;AAmBA,EAAA,SA5yBe,mBA4yBN,MA5yBM,EA4yBE,KA5yBF,EA4yBS,IA5yBT,EA4yBe;AAAA,EAAA;;AAC5B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,IAAL,KAAc,KAAK,IAAL,GAAY,EAA1B;;AAEA,EAAA,QAAI,UAAU,EAAd;AACA,EAAA,QAAI,OAAO,EAAX;AACA,EAAA,QAAI,WAAJ;AACA,EAAA,QAAM,aAAa,KAAK,WAAxB;;AAEA,EAAA,QAAIA,aAAM,QAAN,CAAe,UAAf,CAAJ,EAAgC;AAC9B,EAAA,UAAM,cAAc,WAAW,KAAX,IAAoB,EAAxC;AACA,EAAA,UAAI,WAAW,OAAf,EAAwB;AACtB,EAAA,gBAAQ,WAAR;AACD,EAAA,OAFD,MAEO;AACL,EAAA,qBAAM,UAAN,CAAiB,KAAjB,EAAwB,WAAxB;AACD,EAAA;AACF,EAAA;;AAED,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,eAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA,WAAK,KAAK,EAAL,GAAU,SAAf;AACA,EAAA,aAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,QAAL,CAAc,MAAd,EAAsB,KAAtB,EAA6B,IAA7B,CAAd,CAAP;AACD,EAAA,KALI,EAMJ,IANI,CAMC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACO,OADP;;AAAA,EAAA,UACZ,QADY;AAAA,EAAA,UACF,KADE;;AAEjB,EAAA,mBAAa,WAAW,EAAxB;AACA,EAAA,gBAAU,QAAV;AACA,EAAA,aAAO,KAAP;AACA,EAAA,UAAM,QAAQ,EAAd;AACA,EAAA,mBAAM,eAAN,CAAsB,MAAtB,EAA8B,IAA9B,EAAoC,UAAC,GAAD,EAAM,MAAN,EAAiB;AACnD,EAAA,YAAI,aAAJ;AACA,EAAA,YAAI,IAAI,UAAJ,KAAmB,IAAI,IAAJ,KAAa,QAAb,IAAyB,IAAI,IAAJ,KAAa,SAAzD,CAAJ,EAAyE;AACvE,EAAA,cAAI,IAAI,IAAJ,KAAa,SAAjB,EAA4B;AAC1B,EAAA,mBAAO,OAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,OAA9B,EAAuC,MAAvC,CAAP;AACD,EAAA,WAFD,MAEO;AACL,EAAA,mBAAO,OAAK,UAAL,CAAgB,MAAhB,EAAwB,GAAxB,EAA6B,OAA7B,EAAsC,MAAtC,CAAP;AACD,EAAA;AACF,EAAA,SAND,MAMO,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,SAAlC,EAA6C;AAClD,EAAA,iBAAO,OAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,OAAvC,EAAgD,MAAhD,CAAP;AACD,EAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,SAAb,IAA0B,IAAI,WAAlC,EAA+C;AACpD,EAAA,iBAAO,OAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,OAAzC,EAAkD,MAAlD,CAAP;AACD,EAAA,SAFM,MAEA,IAAI,IAAI,IAAJ,KAAa,WAAjB,EAA8B;AACnC,EAAA,iBAAO,OAAK,aAAL,CAAmB,MAAnB,EAA2B,GAA3B,EAAgC,OAAhC,EAAyC,MAAzC,CAAP;AACD,EAAA;AACD,EAAA,YAAI,IAAJ,EAAU;AACR,EAAA,gBAAM,IAAN,CAAW,IAAX;AACD,EAAA;AACF,EAAA,OAlBD;AAmBA,EAAA,aAAOA,aAAM,OAAN,CAAc,GAAd,CAAkB,KAAlB,CAAP;AACD,EAAA,KAhCI,EAiCJ,IAjCI,CAiCC,YAAM;AACV,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,OAAb,EAAsB,IAAtB,EAA4B,SAA5B,CAAf;AACA,EAAA,eAAS,KAAT,GAAiB,QAAQ,MAAzB;AACA,EAAA,iBAAW,OAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,cAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,OAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,QAA9B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KA1CI,CAAP;AA2CD,EAAA,GA32Bc;;;AA62Bf,EAAA;;;;;;;;;;AAUA,EAAA,QAv3Be,kBAu3BP,GAv3BO,EAu3BF,IAv3BE,EAu3BI;AACjB,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,WAAO,KAAK,GAAL,MAAc,SAAd,GAA0BA,aAAM,SAAN,CAAgB,KAAK,GAAL,CAAhB,CAA1B,GAAuDA,aAAM,SAAN,CAAgB,KAAK,GAAL,CAAhB,CAA9D;AACD,EAAA,GA13Bc;;;AA43Bf,EAAA;;;;;;;;;AASA,EAAA,aAr4Be,uBAq4BF,MAr4BE,EAq4BM,GAr4BN,EAq4BW,OAr4BX,EAq4BoB,MAr4BpB,EAq4B4B;AAAA,EAAA;;AACzC,EAAA,QAAI,WAAW,KAAf;;AAEA,EAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,EAAA,iBAAW,IAAX;AACA,EAAA,gBAAU,CAAC,OAAD,CAAV;AACD,EAAA;AACD,EAAA,QAAM,MAAM,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,EAAA,aAAY,OAAK,qBAAL,CAA2B,MAA3B,EAAmC,GAAnC,EAAwC,MAAxC,CAAZ;AAAA,EAAA,KAAZ,CAAZ;AACA,EAAA,QAAM,QAAQ;AACZ,EAAA,aAAO;AADK,EAAA,KAAd;AAGA,EAAA,QAAM,WAAW,MAAM,KAAN,CAAY,IAAI,UAAhB,IAA8B,EAA/C;AACA,EAAA,QAAI,QAAJ,EAAc;AACZ,EAAA;AACA,EAAA,eAAS,IAAT,IAAiB,IAAI,CAAJ,CAAjB;AACD,EAAA,KAHD,MAGO;AACL,EAAA,eAAS,IAAT,IAAiB,IAAI,MAAJ,CAAW,UAAC,EAAD;AAAA,EAAA,eAAQ,EAAR;AAAA,EAAA,OAAX,CAAjB;AACD,EAAA;AACD,EAAA,WAAO,KAAK,OAAL,CAAa,IAAI,WAAJ,EAAb,EAAgC,KAAhC,EAAuC,MAAvC,EAA+C,IAA/C,CAAoD,UAAC,YAAD,EAAkB;AAC3E,EAAA,cAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,EAAA,YAAI,WAAW,EAAf;AACA,EAAA;AACA,EAAA,YAAI,QAAJ,EAAc;AACZ,EAAA,qBAAW,YAAX;AACD,EAAA,SAFD,MAEO;AACL,EAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,EAAA,gBAAIA,aAAM,GAAN,CAAU,WAAV,EAAuB,IAAI,UAA3B,MAA2C,OAAO,OAAO,WAAd,CAA/C,EAA2E;AACzE,EAAA,uBAAS,IAAT,CAAc,WAAd;AACD,EAAA;AACF,EAAA,WAJD;AAKD,EAAA;AACD,EAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,QAA1B;AACD,EAAA,OAbD;AAcD,EAAA,KAfM,CAAP;AAgBD,EAAA,GAv6Bc;AAy6Bf,EAAA,sBAz6Be,gCAy6BO,MAz6BP,EAy6Be,GAz6Bf,EAy6BoB,OAz6BpB,EAy6B6B,MAz6B7B,EAy6BqC;AAAA,EAAA;;AAClD,EAAA,QAAI,eAAJ;AACA,EAAA,QAAM,gBAAgB,IAAI,WAAJ,EAAtB;;AAEA,EAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,EAAA,eAAS,OAAT;AACD,EAAA;;AAED,EAAA,QAAI,MAAJ,EAAY;AACV,EAAA,aAAO,KAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,EAAA,kCACG,cAAc,WADjB,EAC+B;AAC3B,EAAA,gBAAM,KAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC;AADqB,EAAA,SAD/B;AADiC,EAAA,OAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,EAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAA1B;AACD,EAAA,OARM,CAAP;AASD,EAAA,KAVD,MAUO;AAAA,EAAA;AACL,EAAA,YAAI,YAAY,EAAhB;AACA,EAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,EAAA,sBAAY,UAAU,MAAV,CAAiB,QAAK,oBAAL,CAA0B,MAA1B,EAAkC,GAAlC,EAAuC,MAAvC,CAAjB,CAAZ;AACD,EAAA,SAFD;AAGA,EAAA;AAAA,EAAA,aAAO,QAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,EAAA,sCACG,cAAc,WADjB,EAC+B;AAC3B,EAAA,oBAAM,OAAO,SAAP,EAAkB,MAAlB,CAAyB,UAAC,CAAD;AAAA,EAAA,uBAAO,CAAP;AAAA,EAAA,eAAzB;AADqB,EAAA,aAD/B;AADiC,EAAA,WAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,EAAA,oBAAQ,OAAR,CAAgB,UAAC,IAAD,EAAU;AACxB,EAAA,kBAAI,WAAW,EAAf;AACA,EAAA,kBAAI,WAAWA,aAAM,GAAN,CAAU,IAAV,EAAgB,IAAI,SAApB,KAAkC,EAAjD;AACA,EAAA,yBAAWA,aAAM,OAAN,CAAc,QAAd,IAA0B,QAA1B,GAAqC,OAAO,IAAP,CAAY,QAAZ,CAAhD;AACA,EAAA,2BAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,EAAA,oBAAI,YAAY,SAAS,OAAT,CAAiB,YAAY,cAAc,WAA1B,CAAjB,MAA6D,CAAC,CAA9E,EAAiF;AAC/E,EAAA,2BAAS,IAAT,CAAc,WAAd;AACD,EAAA;AACF,EAAA,eAJD;AAKA,EAAA,kBAAI,aAAJ,CAAkB,IAAlB,EAAwB,QAAxB;AACD,EAAA,aAVD;AAWA,EAAA,mBAAO,YAAP;AACD,EAAA,WAnBM;AAAP,EAAA;AALK,EAAA;;AAAA,EAAA;AAyBN,EAAA;AACF,EAAA,GAr9Bc;AAu9Bf,EAAA,wBAv9Be,kCAu9BS,MAv9BT,EAu9BiB,GAv9BjB,EAu9BsB,OAv9BtB,EAu9B+B,MAv9B/B,EAu9BuC;AAAA,EAAA;;AACpD,EAAA,QAAM,gBAAgB,IAAI,WAAJ,EAAtB;AACA,EAAA,QAAM,cAAc,OAAO,WAA3B;AACA,EAAA,QAAI,eAAJ;;AAEA,EAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,EAAA,eAAS,OAAT;AACD,EAAA;;AAED,EAAA,QAAI,MAAJ,EAAY;AACV,EAAA,aAAO,KAAK,OAAL,CAAa,IAAI,WAAJ,EAAb,EAAgC;AACrC,EAAA,kCACG,IAAI,WADP,EACqB;AACjB,EAAA,sBAAY,KAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC;AADK,EAAA,SADrB;AADqC,EAAA,OAAhC,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,EAAA,YAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAA1B;AACD,EAAA,OARM,CAAP;AASD,EAAA,KAVD,MAUO;AACL,EAAA,aAAO,KAAK,OAAL,CAAa,aAAb,EAA4B;AACjC,EAAA,kCACG,IAAI,WADP,EACqB;AACjB,EAAA,2BAAiB,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,EAAA,mBAAY,QAAK,sBAAL,CAA4B,MAA5B,EAAoC,GAApC,EAAyC,MAAzC,CAAZ;AAAA,EAAA,WAAZ;AADA,EAAA,SADrB;AADiC,EAAA,OAA5B,EAMJ,MANI,EAMI,IANJ,CAMS,UAAC,YAAD,EAAkB;AAChC,EAAA,YAAM,mBAAmB,IAAI,WAA7B;AACA,EAAA,gBAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,EAAA,cAAM,gBAAgB,EAAtB;AACA,EAAA,cAAM,KAAKA,aAAM,GAAN,CAAU,MAAV,EAAkB,WAAlB,CAAX;AACA,EAAA,uBAAa,OAAb,CAAqB,UAAC,WAAD,EAAiB;AACpC,EAAA,gBAAM,cAAcA,aAAM,GAAN,CAAU,YAAV,EAAwB,gBAAxB,KAA6C,EAAjE;AACA,EAAA,gBAAI,YAAY,OAAZ,CAAoB,EAApB,MAA4B,CAAC,CAAjC,EAAoC;AAClC,EAAA,4BAAc,IAAd,CAAmB,WAAnB;AACD,EAAA;AACF,EAAA,WALD;AAMA,EAAA,cAAI,aAAJ,CAAkB,MAAlB,EAA0B,aAA1B;AACD,EAAA,SAVD;AAWD,EAAA,OAnBM,CAAP;AAoBD,EAAA;AACF,EAAA,GAhgCc;;;AAkgCf,EAAA;;;;;;;;;AASA,EAAA,YA3gCe,sBA2gCH,MA3gCG,EA2gCK,GA3gCL,EA2gCU,OA3gCV,EA2gCmB,MA3gCnB,EA2gC2B;AACxC,EAAA,QAAIA,aAAM,QAAN,CAAe,OAAf,KAA2B,CAACA,aAAM,OAAN,CAAc,OAAd,CAAhC,EAAwD;AACtD,EAAA,gBAAU,CAAC,OAAD,CAAV;AACD,EAAA;AACD,EAAA,WAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,GAAzB,EAA8B,OAA9B,EAAuC,MAAvC,EAA+C,IAA/C,CAAoD,YAAM;AAC/D,EAAA,cAAQ,OAAR,CAAgB,UAAC,MAAD,EAAY;AAC1B,EAAA,YAAM,cAAc,IAAI,aAAJ,CAAkB,MAAlB,CAApB;AACA,EAAA,YAAIA,aAAM,OAAN,CAAc,WAAd,KAA8B,YAAY,MAA9C,EAAsD;AACpD,EAAA,cAAI,aAAJ,CAAkB,MAAlB,EAA0B,YAAY,CAAZ,CAA1B;AACD,EAAA;AACF,EAAA,OALD;AAMD,EAAA,KAPM,CAAP;AAQD,EAAA,GAvhCc;;;AAyhCf,EAAA;;;;;;;;;;;;AAYA,EAAA,uBAriCe,iCAqiCQ,MAriCR,EAqiCgB,GAriChB,EAqiCqB,MAriCrB,EAqiC6B;AAC1C,EAAA,WAAO,IAAI,aAAJ,CAAkB,MAAlB,CAAP;AACD,EAAA,GAviCc;;;AAyiCf,EAAA;;;;;;;;;AASA,EAAA,sBAljCe,gCAkjCO,MAljCP,EAkjCe,GAljCf,EAkjCoB,MAljCpB,EAkjC4B;AACzC,EAAA,QAAI,YAAY,EAAhB;AACA,EAAA,QAAI,WAAWA,aAAM,GAAN,CAAU,MAAV,EAAkB,IAAI,SAAtB,KAAoC,EAAnD;AACA,EAAA,eAAWA,aAAM,OAAN,CAAc,QAAd,IAA0B,QAA1B,GAAqC,OAAO,IAAP,CAAY,QAAZ,CAAhD;AACA,EAAA,gBAAY,UAAU,MAAV,CAAiB,QAAjB,CAAZ;AACA,EAAA,WAAO,OAAO,SAAP,EAAkB,MAAlB,CAAyB,UAAC,CAAD;AAAA,EAAA,aAAO,CAAP;AAAA,EAAA,KAAzB,CAAP;AACD,EAAA,GAxjCc;;;AA0jCf,EAAA;;;;;;;;;AASA,EAAA,wBAnkCe,kCAmkCS,MAnkCT,EAmkCiB,GAnkCjB,EAmkCsB,MAnkCtB,EAmkC8B;AAC3C,EAAA,WAAOA,aAAM,GAAN,CAAU,MAAV,EAAkB,OAAO,WAAzB,CAAP;AACD,EAAA,GArkCc;;;AAukCf,EAAA;;;;;;;;;AASA,EAAA,yBAhlCe,mCAglCU,MAhlCV,EAglCkB,GAhlClB,EAglCuB,MAhlCvB,EAglC+B;AAC5C,EAAA,WAAO,IAAI,aAAJ,CAAkB,MAAlB,CAAP;AACD,EAAA,GAllCc;;;AAolCf,EAAA;;;;;;;;;;;;;;;;;;;;AAoBA,EAAA,KAxmCe,eAwmCV,MAxmCU,EAwmCF,KAxmCE,EAwmCK,KAxmCL,EAwmCY,IAxmCZ,EAwmCkB;AAAA,EAAA;;AAC/B,EAAA,QAAI,WAAJ;AACA,EAAA,QAAI,CAACA,aAAM,QAAN,CAAe,KAAf,CAAL,EAA4B;AAC1B,EAAA,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD,EAAA;AACD,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,CAAd,EACJ,IADI,CACC,YAAM;AACV,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,KAA5B,EAAmC,IAAnC;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,KAAlB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,EAAA,KANI,EAOJ,IAPI,CAOC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,EAA3B,CAAf;AACA,EAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC,QAArC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAjBI,CAAP;AAkBD,EAAA,GApoCc;;;AAsoCf,EAAA;;;;;;;;AAQA,EAAA,SA9oCe,mBA8oCN,QA9oCM,EA8oCI,IA9oCJ,EA8oCU;AACvB,EAAA,WAAO,KAAK,MAAL,CAAY,KAAZ,EAAmB,IAAnB,IAA2B,QAA3B,GAAsC,SAAS,IAAtD;AACD,EAAA,GAhpCc;;;AAkpCf,EAAA;;;;;;;;;;;;;;AAcA,EAAA,QAhqCe,kBAgqCP,MAhqCO,EAgqCC,EAhqCD,EAgqCK,KAhqCL,EAgqCY,IAhqCZ,EAgqCkB;AAAA,EAAA;;AAC/B,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,WAAJ;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,cAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;AAChB,EAAA;AACA,EAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,EAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,QAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,KAAzB,EAAgC,IAAhC;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,OAAL,CAAa,MAAb,EAAqB,EAArB,EAAyB,KAAzB,EAAgC,IAAhC,CAAd,CAAP;AACD,EAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,EAAA,oCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,QAA3B,CAAf;AACA,EAAA,eAAS,OAAT,GAAmB,OAAO,CAAP,GAAW,CAA9B;AACA,EAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,aAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KApBI,CAAP;AAqBD,EAAA,GA5rCc;;;AA8rCf,EAAA;;;;;;;;;;;;;;;;;;;;AAoBA,EAAA,WAltCe,qBAktCJ,MAltCI,EAktCI,KAltCJ,EAktCW,KAltCX,EAktCkB,IAltClB,EAktCwB;AAAA,EAAA;;AACrC,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,WAAJ;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,iBAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,CAAd,EACJ,IADI,CACC,UAAC,MAAD,EAAY;AAChB,EAAA;AACA,EAAA,cAAQ,WAAW,SAAX,GAAuB,KAAvB,GAA+B,MAAvC;AACA,EAAA,cAAQ,iBAAiB,MAAjB,EAAyB,KAAzB,EAAgC,IAAhC,CAAR;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,KAA5B,EAAmC,IAAnC;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,UAAL,CAAgB,MAAhB,EAAwB,KAAxB,EAA+B,KAA/B,EAAsC,IAAtC,CAAd,CAAP;AACD,EAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,EAAA,qCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,eAAS,OAAO,EAAhB;AACA,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,WAA3B,CAAf;AACA,EAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,EAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,gBAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC,QAArC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KArBI,CAAP;AAsBD,EAAA,GAhvCc;;;AAkvCf,EAAA;;;;;;;;;;;;AAYA,EAAA,YA9vCe,sBA8vCH,MA9vCG,EA8vCK,OA9vCL,EA8vCc,IA9vCd,EA8vCoB;AAAA,EAAA;;AACjC,EAAA,gBAAY,UAAU,EAAtB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,WAAJ;AACA,EAAA,QAAM,cAAc,OAAO,WAA3B;;AAEA,EAAA,cAAU,QAAQ,MAAR,CAAe,UAAC,MAAD;AAAA,EAAA,aAAYA,aAAM,GAAN,CAAU,MAAV,EAAkB,WAAlB,CAAZ;AAAA,EAAA,KAAf,CAAV;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,kBAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,CAAd,EACJ,IADI,CACC,UAAC,QAAD,EAAc;AAClB,EAAA;AACA,EAAA,gBAAU,aAAa,SAAb,GAAyB,OAAzB,GAAmC,QAA7C;AACA,EAAA,gBAAU,QAAQ,GAAR,CAAY,UAAC,MAAD;AAAA,EAAA,eAAY,iBAAiB,MAAjB,EAAyB,MAAzB,EAAiC,IAAjC,CAAZ;AAAA,EAAA,OAAZ,CAAV;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,OAArB,EAA8B,IAA9B;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,WAAL,CAAiB,MAAjB,EAAyB,OAAzB,EAAkC,IAAlC,CAAd,CAAP;AACD,EAAA,KARI,EASJ,IATI,CASC,UAAC,OAAD,EAAa;AAAA,EAAA,qCACI,OADJ;;AAAA,EAAA,UACZ,IADY;AAAA,EAAA,UACN,MADM;;AAEjB,EAAA,eAAS,OAAO,EAAhB;AACA,EAAA,iBAAW,SAAS,EAApB;AACA,EAAA,UAAI,WAAW,IAAI,QAAJ,CAAa,IAAb,EAAmB,MAAnB,EAA2B,YAA3B,CAAf;AACA,EAAA,eAAS,OAAT,GAAmB,KAAK,MAAxB;AACA,EAAA,iBAAW,QAAK,OAAL,CAAa,QAAb,EAAuB,IAAvB,CAAX;;AAEA,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,iBAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,QAAhC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KArBI,CAAP;AAsBD,EAAA;AA9xCc,EAAA,CAAjB,EAiyCA;;EC/4CA,qBAAA;AACA,AAMA,EAAA,IAAI,WAAW,KAAf;;AAEA,EAAA,IAAI;AACF,EAAA,aAAW,UAAU,OAAO,KAA5B;AACD,EAAA,CAFD,CAEE,OAAO,CAAP,EAAU;;AAEZ,EAAA,SAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,EAAA,SAAQ,SAAS,IAAT,IAAiB,UAAU,EAAnC;AACD,EAAA;AACD,EAAA,SAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,EAAA,gBAAc,YAAY,EAA1B;AACA,EAAA,SAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP;AACD,EAAA;AACD,EAAA,SAAS,QAAT,GAA4B;AAAA,EAAA,oCAAN,IAAM;AAAN,EAAA,QAAM;AAAA,EAAA;;AAC1B,EAAA,MAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAb;AACA,EAAA,SAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP;AACD,EAAA;;AAED,EAAA,SAAS,MAAT,CAAiB,GAAjB,EAAsB;AACpB,EAAA,SAAO,mBAAmB,GAAnB,EACJ,OADI,CACI,OADJ,EACa,GADb,EAEJ,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJ,OAHI,CAGI,MAHJ,EAGY,GAHZ,EAIJ,OAJI,CAII,OAJJ,EAIa,GAJb,EAKJ,OALI,CAKI,MALJ,EAKY,GALZ,EAMJ,OANI,CAMI,OANJ,EAMa,GANb,EAOJ,OAPI,CAOI,OAPJ,EAOa,GAPb,CAAP;AAQD,EAAA;;AAED,EAAA,SAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,EAAA,MAAI,CAAC,MAAL,EAAa;AACX,EAAA,WAAO,GAAP;AACD,EAAA;;AAED,EAAA,MAAM,QAAQ,EAAd;;AAEA,EAAA,eAAM,MAAN,CAAa,MAAb,EAAqB,UAAU,GAAV,EAAe,GAAf,EAAoB;AACvC,EAAA,QAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAnC,EAAgD;AAC9C,EAAA;AACD,EAAA;AACD,EAAA,QAAI,CAACA,aAAM,OAAN,CAAc,GAAd,CAAL,EAAyB;AACvB,EAAA,YAAM,CAAC,GAAD,CAAN;AACD,EAAA;;AAED,EAAA,QAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,EAAA,UAAI,SAAS,IAAT,CAAc,CAAd,MAAqB,eAAzB,EAA0C;AACxC,EAAA,YAAI,EAAE,WAAF,EAAJ;AACD,EAAA,OAFD,MAEO,IAAIA,aAAM,QAAN,CAAe,CAAf,CAAJ,EAAuB;AAC5B,EAAA,YAAIA,aAAM,MAAN,CAAa,CAAb,CAAJ;AACD,EAAA;AACD,EAAA,YAAM,IAAN,CAAc,OAAO,GAAP,CAAd,SAA6B,OAAO,CAAP,CAA7B;AACD,EAAA,KAPD;AAQD,EAAA,GAhBD;;AAkBA,EAAA,MAAI,MAAM,MAAN,GAAe,CAAnB,EAAsB;AACpB,EAAA,WAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAtB,GAA0B,GAA1B,GAAgC,GAAjC,IAAwC,MAAM,IAAN,CAAW,GAAX,CAA/C;AACD,EAAA;;AAED,EAAA,SAAO,GAAP;AACD,EAAA;;AAED,EAAA,IAAM,WAAW;AACf,EAAA;;;;;;;;;;;;AAYA,EAAA,YAAU,EAbK;;AAef,EAAA;;;;;;;;AAQA,EAAA,sBAAoB,KAvBL;;AAyBf,EAAA;;;;;;;;;AASA,EAAA,QAAM,KAlCS;;AAoCf,EAAA;;;;;;;;AAQA,EAAA,cAAY,EA5CG;;AA8Cf,EAAA;;;;;;;AAOA,EAAA,UAAQ,EArDO;;AAuDf,EAAA;;;;;;;;;AASA,EAAA,YAAU;AAhEK,EAAA,CAAjB;;AAmEA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,AAAO,EAAA,SAAS,WAAT,CAAsB,IAAtB,EAA4B;AACjC,EAAA,eAAM,cAAN,CAAqB,IAArB,EAA2B,WAA3B;;AAEA,EAAA,WAAS,OAAO,EAAhB;AACA,EAAA;AACA,EAAA,eAAM,MAAN,CAAa,IAAb,EAAmB,QAAnB;AACA,EAAA,UAAQ,IAAR,CAAa,IAAb,EAAmB,IAAnB;AACD,EAAA;;AAED,EAAA;;;;;AAKA,EAAA,QAAQ,MAAR,CAAe;AACb,EAAA,eAAa,WADA;;AAGb,EAAA;;;;;;;;AAQA,EAAA,YAAU,KAXG;;AAab,EAAA;;;;;;;;AAQA,EAAA,YAAU,KArBG;;AAuBb,EAAA;;;;;;;AAOA,EAAA,aAAW,KA9BE;;AAgCb,EAAA;;;;;;;;;AASA,EAAA,aAAW,KAzCE;;AA2Cb,EAAA;;;;;;;;;AASA,EAAA,YAAU,KApDG;;AAsDb,EAAA;;;;;;;AAOA,EAAA,aAAW,IA7DE;;AA+Db,EAAA;;;;;;;AAOA,EAAA,aAAW,IAtEE;;AAwEb,EAAA;;;;;;AAMA,EAAA,cAAY,IA9EC;;AAgFb,EAAA;;;;;;;;AAQA,EAAA,cAAY,IAxFC;;AA0Fb,EAAA;;;;;;;;AAQA,EAAA,aAAW,IAlGE;;AAoGb,EAAA,QApGa,kBAoGL,MApGK,EAoGG,KApGH,EAoGU,IApGV,EAoGgB;AAAA,EAAA;;AAC3B,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,OAAb,EAAsB,MAAtB,EAA8B,KAAK,MAAnC,EAA2C,IAA3C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,MAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAzGY;AA2Gb,EAAA,SA3Ga,mBA2GJ,MA3GI,EA2GI,KA3GJ,EA2GW,IA3GX,EA2GiB;AAAA,EAAA;;AAC5B,EAAA,WAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,KAA/B,EAAsC,IAAtC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAJA,CAAP;AAKD,EAAA,GAjHY;AAmHb,EAAA,aAnHa,uBAmHA,MAnHA,EAmHQ,KAnHR,EAmHe,IAnHf,EAmHqB;AAAA,EAAA;;AAChC,EAAA,WAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAJA,CAAP;AAKD,EAAA,GAzHY;AA2Hb,EAAA,UA3Ha,oBA2HH,MA3HG,EA2HK,EA3HL,EA2HS,IA3HT,EA2He;AAAA,EAAA;;AAC1B,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAhIY;AAkIb,EAAA,aAlIa,uBAkIA,MAlIA,EAkIQ,KAlIR,EAkIe,IAlIf,EAkIqB;AAAA,EAAA;;AAChC,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAvIY;AAyIb,EAAA,MAzIa,gBAyIP,MAzIO,EAyIC,IAzID,EAyIO,QAzIP,EAyIiB;AAC5B,EAAA,WAAO,CAAC,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAD,EAA2C,QAA3C,CAAP;AACD,EAAA,GA3IY;AA6Ib,EAAA,OA7Ia,iBA6IN,MA7IM,EA6IE,EA7IF,EA6IM,IA7IN,EA6IY;AAAA,EAAA;;AACvB,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAlJY;AAoJb,EAAA,UApJa,oBAoJH,MApJG,EAoJK,KApJL,EAoJY,IApJZ,EAoJkB;AAAA,EAAA;;AAC7B,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAArC,EAA6C,IAA7C,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAzJY;AA2Jb,EAAA,MA3Ja,gBA2JP,MA3JO,EA2JC,KA3JD,EA2JQ,KA3JR,EA2Je,IA3Jf,EA2JqB;AAAA,EAAA;;AAChC,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,KAAb,EAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CADK,EAEL,IAFK,EAGL,IAHK,CAGA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAHA,CAAP;AAID,EAAA,GAhKY;AAkKb,EAAA,SAlKa,mBAkKJ,MAlKI,EAkKI,EAlKJ,EAkKQ,KAlKR,EAkKe,IAlKf,EAkKqB;AAAA,EAAA;;AAChC,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,QAAb,EAAuB,MAAvB,EAA+B,EAA/B,EAAmC,IAAnC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,EAAA,aAAc,OAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAJA,CAAP;AAKD,EAAA,GAxKY;AA0Kb,EAAA,YA1Ka,sBA0KD,MA1KC,EA0KO,KA1KP,EA0Kc,KA1Kd,EA0KqB,IA1KrB,EA0K2B;AAAA,EAAA;;AACtC,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,WAAb,EAA0B,MAA1B,EAAkC,IAAlC,EAAwC,IAAxC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,KAAvB,EAA8B,IAA9B,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,EAAA,aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAJA,CAAP;AAKD,EAAA,GAhLY;AAkLb,EAAA,aAlLa,uBAkLA,MAlLA,EAkLQ,OAlLR,EAkLiB,IAlLjB,EAkLuB;AAAA,EAAA;;AAClC,EAAA,WAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,EAIL,IAJK,CAIA,UAAC,QAAD;AAAA,EAAA,aAAc,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,EAAwB,QAAxB,CAAd;AAAA,EAAA,KAJA,CAAP;AAKD,EAAA,GAxLY;;;AA0Lb,EAAA;;;;;;;;;;;;AAYA,EAAA,OAtMa,iBAsMN,MAtMM,EAsME,KAtMF,EAsMS,IAtMT,EAsMe;AAC1B,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,CAAY,KAAZ,GAAoB,IAApB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,KAAlB,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,MAAnC,EAA2C,KAA3C,EAAkD,IAAlD,CAAP;AACD,EAAA,GA/MY;;;AAiNb,EAAA;;;;;;;;;;;;AAYA,EAAA,QA7Na,kBA6NL,MA7NK,EA6NG,KA7NH,EA6NU,IA7NV,EA6NgB;AAC3B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,KAA5C,EAAmD,IAAnD,CAAP;AACD,EAAA,GAnOY;;;AAqOb,EAAA;;;;;;;;;;;;AAYA,EAAA,YAjPa,sBAiPD,MAjPC,EAiPO,KAjPP,EAiPc,IAjPd,EAiPoB;AAC/B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,EAAA,GAvPY;;;AAyPb,EAAA;;;;;;;;;;;AAWA,EAAA,KApQa,eAoQR,GApQQ,EAoQH,MApQG,EAoQK,IApQL,EAoQW;AAAA,EAAA;;AACtB,EAAA,QAAI,WAAJ;AACA,EAAA,eAAW,SAAS,EAApB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,EAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjC;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,EAAA;AACA,EAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,EAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,EAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;AAClB,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAbI,CAAP;AAcD,EAAA,GA3RY;;;AA6Rb,EAAA;;;;;;;;;;;AAWA,EAAA,aAxSa,uBAwSA,MAxSA,EAwSQ,QAxSR,EAwSkB,IAxSlB,EAwSwB;AACnC,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,WAAtB,CAAJ,EAAwC;AACtC,EAAA,aAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP;AACD,EAAA;AACD,EAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,WAAxB,CAAJ,EAA0C;AACxC,EAAA,aAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP;AACD,EAAA;AACD,EAAA,QAAI,YAAY,SAAS,cAAT,CAAwB,MAAxB,CAAhB,EAAiD;AAC/C,EAAA,aAAO,SAAS,IAAhB;AACD,EAAA;AACD,EAAA,WAAO,QAAP;AACD,EAAA,GApTY;;;AAsTb,EAAA;;;;;;;;;;;;AAYA,EAAA,SAlUa,mBAkUJ,MAlUI,EAkUI,EAlUJ,EAkUQ,IAlUR,EAkUc;AACzB,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,EAA7C,EAAiD,IAAjD,CAAP;AACD,EAAA,GAxUY;;;AA0Ub,EAAA;;;;;;;;;;;;AAYA,EAAA,YAtVa,sBAsVD,MAtVC,EAsVO,KAtVP,EAsVc,IAtVd,EAsVoB;AAC/B,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,EAAA,GA9VY;;;AAgWb,EAAA;;;;;;;AAOA,EAAA,OAvWa,mBAuWG;AACd,EAAA,QAAI,OAAJ,EAAa;AAAA,EAAA;;AACX,EAAA,2BAAQ,OAAO,QAAQ,KAAf,KAAyB,UAAzB,GAAsC,OAAtC,GAAgD,KAAxD;AACD,EAAA;AACF,EAAA,GA3WY;;;AA6Wb,EAAA;;;;;;;;;;;;AAYA,EAAA,OAzXa;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;;AAAA,EAAA;AAAA,EAAA,cAyXN,MAzXM,EAyXE;AACb,EAAA,QAAM,gBAAgB;AACpB,EAAA,cAAQ,OAAO,MADK;AAEpB,EAAA;AACA,EAAA,eAAS,IAAI,OAAJ,CAAY,OAAO,OAAP,IAAkB,EAA9B;AAHW,EAAA,KAAtB;;AAMA,EAAA,QAAI,OAAO,IAAX,EAAiB;AACf,EAAA,oBAAc,IAAd,GAAqBA,aAAM,MAAN,CAAa,OAAO,IAApB,CAArB;AACD,EAAA;;AAED,EAAA,WAAO,MAAM,SAAS,OAAO,GAAhB,EAAqB,OAAO,MAA5B,CAAN,EAA2C,aAA3C,EACJ,IADI,CACC,UAAC,QAAD,EAAc;AAClB,EAAA,eAAS,MAAT,GAAkB;AAChB,EAAA,gBAAQ,OAAO,MADC;AAEhB,EAAA,aAAK,OAAO;AAFI,EAAA,OAAlB;AAIA,EAAA,aAAO,SAAS,IAAT,GACJ,IADI,CACC,UAAC,IAAD,EAAU;AACd,EAAA,iBAAS,IAAT,GAAgB,IAAhB;AACA,EAAA,eAAO,QAAP;AACD,EAAA,OAJI,CAAP;AAKD,EAAA,KAXI,CAAP;AAYD,EAAA,GAhZY;;;AAkZb,EAAA;;;;;;;;;;;;AAYA,EAAA,MA9Za,gBA8ZP,MA9ZO,EA8ZC,EA9ZD,EA8ZK,IA9ZL,EA8ZW;AACtB,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,IAAlB,CAAuB,IAAvB,CAA4B,IAA5B,EAAkC,MAAlC,EAA0C,EAA1C,EAA8C,IAA9C,CAAP;AACD,EAAA,GApaY;;;AAsab,EAAA;;;;;;;;;;;;AAYA,EAAA,SAlba,mBAkbJ,MAlbI,EAkbI,KAlbJ,EAkbW,IAlbX,EAkbiB;AAC5B,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,OAAlB,CAA0B,IAA1B,CAA+B,IAA/B,EAAqC,MAArC,EAA6C,KAA7C,EAAoD,IAApD,CAAP;AACD,EAAA,GA1bY;;;AA4bb,EAAA;;;;;;;;;;AAUA,EAAA,KAtca,eAscR,GAtcQ,EAscH,MAtcG,EAscK,IAtcL,EAscW;AAAA,EAAA;;AACtB,EAAA,QAAI,WAAJ;AACA,EAAA,eAAW,SAAS,EAApB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,EAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,EAAA;AACA,EAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B;AACA,EAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,EAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;AAClB,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAbI,CAAP;AAcD,EAAA,GA7dY;;;AA+db,EAAA;;;;;;;;AAQA,EAAA,aAvea,uBAueA,MAveA,EAueQ,EAveR,EAueY,IAveZ,EAuekB;AAAA,EAAA;;AAC7B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAcA,aAAM,WAAN,CAAkB,KAAK,MAAvB,IAAiC,EAAjC,GAAsC,KAAK,MAAzD;AACA,EAAA,QAAM,eAAe,OAAO,YAAP,IAAuB,EAA5C;AACA,EAAA,QAAI,WAAWA,aAAM,WAAN,CAAkB,KAAK,QAAvB,IAAoCA,aAAM,WAAN,CAAkB,OAAO,QAAzB,IAAqC,OAAO,IAA5C,GAAmD,OAAO,QAA9F,GAA0G,KAAK,QAA9H;;AAEA,EAAA,iBAAa,OAAb,CAAqB,UAAC,GAAD,EAAS;AAC5B,EAAA,UAAI,IAAI,IAAJ,KAAa,WAAb,IAA4B,CAAC,IAAI,MAArC,EAA6C;AAC3C,EAAA;AACD,EAAA;AACD,EAAA,UAAI,aAAJ;AACA,EAAA,UAAM,YAAY,IAAI,UAAtB;AACA,EAAA,UAAM,YAAY,IAAI,WAAJ,EAAlB;AACA,EAAA,UAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAf;;AAEA,EAAA,UAAI,aAAa,KAAb,IAAsB,CAAC,SAAvB,IAAoC,CAAC,SAAzC,EAAoD;AAClD,EAAA,YAAI,aAAa,KAAjB,EAAwB;AACtB,EAAA,iBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;AACD,EAAA;AACD,EAAA,eAAO,KAAP;AACD,EAAA,OALD,MAKO;AACL,EAAA,eAAO,KAAK,MAAL,CAAY,SAAZ,CAAP;;AAEA,EAAA,YAAIA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,EAAA,iBAAO,EAAP;AACD,EAAA;;AAED,EAAA,YAAI,IAAJ,EAAU;AACR,EAAA,qBAAW,YAAY,IAAI,aAAJ,CAAkB,IAAlB,CAAZ,KAAwC,IAAI,aAAJ,CAAkB,IAAlB,IAA0BA,aAAM,GAAN,CAAU,IAAI,aAAJ,CAAkB,IAAlB,CAAV,EAAmC,UAAU,WAA7C,CAA1B,GAAsF,IAA9H,CAAX;AACD,EAAA;;AAED,EAAA,YAAI,QAAJ,EAAc;AAAA,EAAA;AACZ,EAAA,mBAAO,KAAK,QAAZ;AACA,EAAA,gBAAM,QAAQ,EAAd;AACA,EAAA,yBAAM,MAAN,CAAa,IAAb,EAAmB,UAAC,KAAD,EAAQ,GAAR,EAAgB;AACjC,EAAA,oBAAM,GAAN,IAAa,KAAb;AACD,EAAA,aAFD;AAGA,EAAA,yBAAM,CAAN,CAAQ,KAAR,EAAe,SAAf;AACA,EAAA,uBAAW,SAAS,QAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,CAAT,EAAuD,QAAvD,EAAiE,QAAjE,CAAX;AACA,EAAA;AAAA,EAAA,iBAAO;AAAP,EAAA;AARY,EAAA;;AAAA,EAAA;AASb,EAAA;AACF,EAAA;AACF,EAAA,KApCD;;AAsCA,EAAA,WAAO,QAAP;AACD,EAAA,GAphBY;;;AAshBb,EAAA;;;;;;;;AAQA,EAAA,SA9hBa,mBA8hBJ,MA9hBI,EA8hBI,MA9hBJ,EA8hBY,EA9hBZ,EA8hBgB,IA9hBhB,EA8hBsB;AACjC,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAM,OAAO,CACX,KAAK,QAAL,KAAkB,SAAlB,GAA+B,OAAO,QAAP,KAAoB,SAApB,GAAgC,KAAK,QAArC,GAAgD,OAAO,QAAtF,GAAkG,KAAK,QAD5F,EAEX,KAAK,WAAL,CAAiB,MAAjB,EAA0BA,aAAM,QAAN,CAAe,EAAf,KAAsBA,aAAM,QAAN,CAAe,EAAf,CAAtB,IAA4C,WAAW,QAAxD,GAAoE,EAApE,GAAyE,IAAlG,EAAwG,IAAxG,CAFW,CAAb;AAIA,EAAA,QAAI,WAAW,MAAX,IAAqB,WAAW,QAAhC,IAA4C,WAAW,SAA3D,EAAsE;AACpE,EAAA,WAAK,IAAL,CAAU,EAAV;AACD,EAAA;AACD,EAAA,WAAO,SAAS,KAAT,CAAeA,YAAf,EAAsB,IAAtB,CAAP;AACD,EAAA,GAxiBY;AA0iBb,EAAA,WA1iBa,qBA0iBF,IA1iBE,EA0iBI;AACf,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,KAAK,MAAL,KAAgB,SAApB,EAA+B;AAC7B,EAAA,aAAO,EAAP;AACD,EAAA;AACD,EAAA,WAAOA,aAAM,IAAN,CAAW,KAAK,MAAhB,CAAP;AACD,EAAA,GAhjBY;AAkjBb,EAAA,WAljBa,qBAkjBF,MAljBE,EAkjBM,IAljBN,EAkjBY;AACvB,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,KAAK,MAAL,KAAgB,SAApB,EAA+B;AAC7B,EAAA,UAAI,OAAO,MAAP,KAAkB,SAAtB,EAAiC;AAC/B,EAAA,eAAO,KAAK,MAAZ;AACD,EAAA;AACD,EAAA,aAAO,OAAO,MAAd;AACD,EAAA;AACD,EAAA,WAAO,KAAK,MAAZ;AACD,EAAA,GA3jBY;;;AA6jBb,EAAA;;;;;;;;;AASA,EAAA,MAtkBa,gBAskBP,MAtkBO,EAskBC,IAtkBD,EAskBO;AAAA,EAAA;;AAClB,EAAA,QAAM,QAAQ,IAAI,IAAJ,EAAd;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAM,UAAU,OAAO,IAAvB;AACA,EAAA,QAAM,QAAQ,OAAO,KAArB;AACA,EAAA,QAAM,UAAU,OAAO,OAAvB;AACA,EAAA,aAASA,aAAM,IAAN,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,CAAC,MAAD,EAAS,OAAT,EAAkB,SAAlB,CAArC,CAAT;AACA,EAAA,aAASA,aAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAK,UAA7B,CAAT;AACA,EAAA,WAAO,IAAP,GAAc,OAAd;AACA,EAAA,WAAO,KAAP,GAAe,KAAf;AACA,EAAA,WAAO,OAAP,GAAiB,OAAjB;AACA,EAAA,QAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAA/B,MAAsC,GAArE,EAA0E;AACxE,EAAA,aAAO,GAAP,IAAc,GAAd;AACD,EAAA;AACD,EAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB;AACA,EAAA,QAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAtB,IAAgC,KAAK,MAApD;AACA,EAAA,QAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAA7C,MAAyD,MAAvE,EAA+E;AAC7E,EAAA,aAAO,GAAP,IAAc,MAAd;AACD,EAAA;;AAED,EAAA,QAAM,cAAc,SAAd,WAAc,CAAC,IAAD,EAAU;AAC5B,EAAA,UAAM,MAAS,MAAM,WAAN,EAAT,WAAkC,OAAO,MAAP,CAAc,WAAd,EAAlC,SAAiE,OAAO,GAAxE,WAAiF,KAAK,MAAtF,UAAiG,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAxH,QAAN;AACA,EAAA,UAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAxC,EAA6C;AAC3C,EAAA,YAAI,QAAK,GAAT,EAAc;AACZ,EAAA,kBAAK,GAAL,CAAS,GAAT,EAAc,IAAd;AACD,EAAA;AACD,EAAA,eAAO,IAAP;AACD,EAAA,OALD,MAKO;AACL,EAAA,YAAI,QAAK,KAAT,EAAgB;AACd,EAAA,kBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B;AACD,EAAA;AACD,EAAA,eAAOA,aAAM,MAAN,CAAa,IAAb,CAAP;AACD,EAAA;AACF,EAAA,KAbD;;AAeA,EAAA,QAAI,CAAC,KAAK,IAAV,EAAgB;AACd,EAAA,YAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN;AACD,EAAA;;AAED,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,EAAA,eAAS,WAAW,MAApB;AACA,EAAA,UAAI,aAAa,QAAK,QAAL,IAAiB,KAAK,QAAtB,IAAkC,CAAC,QAAK,IAArD,CAAJ,EAAgE;AAC9D,EAAA,eAAO,QAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP;AACD,EAAA;AACD,EAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAuB,WAAvB,EAAoC,WAApC,EACJ,KADI,CACE,UAAC,GAAD;AAAA,EAAA,eAAS,QAAK,aAAL,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC,IAAhC,CAAT;AAAA,EAAA,OADF,CAAP;AAED,EAAA,KARI,EASJ,IATI,CASC,UAAC,QAAD,EAAc;AAClB,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAZI,CAAP;AAaD,EAAA,GA1nBY;;;AA4nBb,EAAA;;;;;;;;;;;AAWA,EAAA,MAvoBa,gBAuoBP,GAvoBO,EAuoBF,IAvoBE,EAuoBI,MAvoBJ,EAuoBY,IAvoBZ,EAuoBkB;AAAA,EAAA;;AAC7B,EAAA,QAAI,WAAJ;AACA,EAAA,eAAW,SAAS,EAApB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,EAAA,WAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,EAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjC;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,YAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,EAAA;AACA,EAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,MAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,EAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,EAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;AAClB,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAbI,CAAP;AAcD,EAAA,GA/pBY;;;AAiqBb,EAAA;;;;;;;;;;;AAWA,EAAA,KA5qBa,eA4qBR,GA5qBQ,EA4qBH,IA5qBG,EA4qBG,MA5qBH,EA4qBW,IA5qBX,EA4qBiB;AAAA,EAAA;;AAC5B,EAAA,QAAI,WAAJ;AACA,EAAA,eAAW,SAAS,EAApB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,WAAO,GAAP,GAAa,OAAO,OAAO,GAA3B;AACA,EAAA,WAAO,IAAP,GAAc,QAAQ,OAAO,IAA7B;AACA,EAAA,WAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;;AAEA,EAAA;AACA,EAAA,SAAK,KAAK,EAAL,GAAU,WAAf;AACA,EAAA,WAAOA,aAAM,OAAN,CAAc,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAd,EACJ,IADI,CACC,UAAC,OAAD,EAAa;AACjB,EAAA;AACA,EAAA,eAAS,YAAY,SAAZ,GAAwB,MAAxB,GAAiC,OAA1C;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,KAAf;AACA,EAAA,cAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC;AACA,EAAA,aAAO,QAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP;AACD,EAAA,KAPI,EAQJ,IARI,CAQC,UAAC,QAAD,EAAc;AAClB,EAAA;AACA,EAAA,WAAK,KAAK,EAAL,GAAU,UAAf;AACA,EAAA,aAAOA,aAAM,OAAN,CAAc,QAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAd,EACJ,IADI,CACC,UAAC,SAAD;AAAA,EAAA,eAAe,cAAc,SAAd,GAA0B,QAA1B,GAAqC,SAApD;AAAA,EAAA,OADD,CAAP;AAED,EAAA,KAbI,CAAP;AAcD,EAAA,GApsBY;;;AAssBb,EAAA;;;;;;;;;;;AAWA,EAAA,gBAjtBa,0BAitBG,MAjtBH,EAitBW,MAjtBX,EAitBmB,IAjtBnB,EAitByB;AACpC,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACzC,EAAA,aAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP;AACD,EAAA;AACD,EAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,cAAxB,CAAJ,EAA6C;AAC3C,EAAA,aAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP;AACD,EAAA;AACD,EAAA,WAAO,MAAP;AACD,EAAA,GA1tBY;;;AA4tBb,EAAA;;;;;;;;;;;;;AAaA,EAAA,eAzuBa,yBAyuBE,GAzuBF,EAyuBO,MAzuBP,EAyuBe,IAzuBf,EAyuBqB;AAChC,EAAA,WAAOA,aAAM,MAAN,CAAa,GAAb,CAAP;AACD,EAAA,GA3uBY;;;AA6uBb,EAAA;;;;;;;;;;AAUA,EAAA,WAvvBa,qBAuvBF,MAvvBE,EAuvBM,IAvvBN,EAuvBY,IAvvBZ,EAuvBkB;AAC7B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAIA,aAAM,UAAN,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AACpC,EAAA,aAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP;AACD,EAAA;AACD,EAAA,QAAIA,aAAM,UAAN,CAAiB,OAAO,SAAxB,CAAJ,EAAwC;AACtC,EAAA,aAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP;AACD,EAAA;AACD,EAAA,WAAO,IAAP;AACD,EAAA,GAhwBY;;;AAkwBb,EAAA;;;;;;;;;;;;;AAaA,EAAA,KA/wBa,eA+wBR,MA/wBQ,EA+wBA,KA/wBA,EA+wBO,KA/wBP,EA+wBc,IA/wBd,EA+wBoB;AAC/B,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,QAAI,CAACA,aAAM,QAAN,CAAe,KAAf,CAAL,EAA4B;AAC1B,EAAA,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACD,EAAA;AACD,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,CAAY,GAAZ,GAAkB,KAAlB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,GAAlB,CAAsB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,EAAyC,KAAzC,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,EAAA,GA3xBY;;;AA6xBb,EAAA;;;;;;;;;;;AAWA,EAAA,QAxyBa,kBAwyBL,MAxyBK,EAwyBG,EAxyBH,EAwyBO,KAxyBP,EAwyBc,IAxyBd,EAwyBoB;AAC/B,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,MAAlB,CAAyB,IAAzB,CAA8B,IAA9B,EAAoC,MAApC,EAA4C,EAA5C,EAAgD,KAAhD,EAAuD,IAAvD,CAAP;AACD,EAAA,GA9yBY;;;AAgzBb,EAAA;;;;;;;;;;;;AAYA,EAAA,WA5zBa,qBA4zBF,MA5zBE,EA4zBM,KA5zBN,EA4zBa,KA5zBb,EA4zBoB,IA5zBpB,EA4zB0B;AACrC,EAAA,cAAU,QAAQ,EAAlB;AACA,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,iBAAM,SAAN,CAAgB,KAAK,MAArB,EAA6B,KAA7B;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,SAAlB,CAA4B,IAA5B,CAAiC,IAAjC,EAAuC,MAAvC,EAA+C,KAA/C,EAAsD,KAAtD,EAA6D,IAA7D,CAAP;AACD,EAAA,GAp0BY;;;AAs0Bb,EAAA;;;;;;;;;;;;;AAaA,EAAA,YAn1Ba,sBAm1BD,MAn1BC,EAm1BO,OAn1BP,EAm1BgB,IAn1BhB,EAm1BsB;AACjC,EAAA,aAAS,OAAO,EAAhB;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,IAAf,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAjC,EAAyC,IAAzC,CAAd;AACA,EAAA,SAAK,MAAL,GAAc,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,CAAd;AACA,EAAA,WAAO,QAAQ,SAAR,CAAkB,UAAlB,CAA6B,IAA7B,CAAkC,IAAlC,EAAwC,MAAxC,EAAgD,OAAhD,EAAyD,IAAzD,CAAP;AACD,EAAA;AAz1BY,EAAA,CAAf;;AA41BA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,AAAO,EAAA,SAAS,SAAT,CAAoB,IAApB,EAA0B,IAA1B,EAAgC;AACrC,EAAA,MAAI,CAAC,IAAD,IAAS,CAACA,aAAM,QAAN,CAAe,IAAf,CAAd,EAAoC;AAClC,EAAA,UAAM,IAAI,SAAJ,CAAc,4DAA2D,IAA3D,yCAA2D,IAA3D,EAAd,CAAN;AACD,EAAA;AACD,EAAA,SAAO,UAAU,MAAV,EAAkB;AACvB,EAAA,QAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,EAAA,YAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAA5C,CAAN;AACD,EAAA;AACD,EAAA,SAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,EAAA,aAAO,MAAP;AAAe,EAAA,KAAlE;AACA,EAAA,SAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,EAAA,aAAO,QAAP;AAAiB,EAAA,KAAxE;AACA,EAAA,SAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,EAAA,aAAOA,aAAM,MAAN,CAAa,GAAb,CAAP;AAA0B,EAAA,KAAtF;AACA,EAAA,WAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAAA,EAAA;;AAClC,EAAA,cAAQ,SAAS,EAAjB;AACA,EAAA,UAAIA,aAAM,QAAN,CAAe,EAAf,CAAJ,EAAwB;AACtB,EAAA,gBAAQ,EAAR;AACD,EAAA;AACD,EAAA,mBAAM,MAAN,CAAa,KAAb,EAAoB,IAApB;AACA,EAAA,UAAI,UAAU,KAAK,UAAL,CAAgB,MAAM,OAAN,IAAiB,KAAK,cAAtB,IAAwC,MAAxD,CAAd;AACA,EAAA,UAAM,SAAS,EAAf;AACA,EAAA,aAAO,MAAP,GAAgB,KAAK,IAArB;AACA,EAAA,mBAAM,SAAN,CAAgB,MAAhB,EAAwB,KAAxB;AACA,EAAA,aAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjC;AACA,EAAA,UAAI,OAAO,MAAM,WAAb,KAA6B,UAAjC,EAA6C;AAC3C,EAAA,eAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb;AACD,EAAA,OAFD,MAEO;AACL,EAAA,YAAI,OAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAvB,IAAmC,QAAQ,QADlC,EAET,QAAQ,WAAR,CAAoB,IAApB,EAA0B,EAA1B,EAA8B,KAA9B,CAFS,CAAX;AAIA,EAAA,YAAIA,aAAM,MAAN,CAAa,EAAb,CAAJ,EAAsB;AACpB,EAAA,eAAK,IAAL,CAAU,EAAV;AACD,EAAA;AACD,EAAA,aAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAA3B;AACA,EAAA,eAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,IAArB,CAAb;AACD,EAAA;AACD,EAAA,aAAOA,aAAM,OAAN,CAAc,MAAd,EACJ,IADI,CACC,MAAM,OADP,EAEJ,IAFI,CAEC,UAAC,MAAD;AAAA,EAAA,eAAY,QAAQ,IAAR,CAAa,MAAb,CAAZ;AAAA,EAAA,OAFD,EAGJ,IAHI,CAGC,UAAC,IAAD,EAAU;AACd,EAAA,YAAI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,EAAA,eAAK,MAAL,CAAY,MAAZ,GAAqB,QAAK,IAA1B;AACD,EAAA;AACD,EAAA,eAAO,IAAP;AACD,EAAA,OARI,EASJ,IATI,CASC,MAAM,QATP,EASiB,MAAM,aATvB,CAAP;AAUD,EAAA,KAlCD;AAmCA,EAAA,WAAO,MAAP;AACD,EAAA,GA3CD;AA4CD,EAAA;;AAED,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,AAAO,EAAA,SAAS,UAAT,CAAqB,IAArB,EAA2B;AAChC,EAAA,WAAS,OAAO,EAAhB;AACA,EAAA,SAAO,UAAU,MAAV,EAAkB;AACvB,EAAA,iBAAM,MAAN,CAAa,IAAb,EAAmB,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACvC,EAAA,gBAAU,GAAV,EAAe,KAAf,EAAsB,MAAtB;AACD,EAAA,KAFD;AAGA,EAAA,WAAO,MAAP;AACD,EAAA,GALD;AAMD,EAAA;;AAED,EAAA;;;;;;;;;;;;;;AAcA,AAAO,EAAA,IAAM,UAAU,gBAAhB,CAEP;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"js-data-fetch.js","sources":["../../node_modules/js-data-adapter/src/index.js","../../src/index.js"],"sourcesContent":["import { Component, utils } from 'js-data'\n\nexport const noop = function (...args) {\n const opts = args[args.length - 1]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const noop2 = function (...args) {\n const opts = args[args.length - 2]\n this.dbg(opts.op, ...args)\n return utils.resolve()\n}\n\nexport const unique = function (array) {\n const seen = {}\n const final = []\n array.forEach(function (item) {\n if (item in seen) {\n return\n }\n final.push(item)\n seen[item] = 0\n })\n return final\n}\n\nexport const withoutRelations = function (mapper, props, opts) {\n opts || (opts = {})\n opts.with || (opts.with = [])\n const relationFields = mapper.relationFields || []\n const toStrip = relationFields.filter((value) => opts.with.indexOf(value) === -1)\n return utils.omit(props, toStrip)\n}\n\nexport const reserved = [\n 'orderBy',\n 'sort',\n 'limit',\n 'offset',\n 'skip',\n 'where'\n]\n\n/**\n * Response object used when `raw` is `true`. May contain other fields in\n * addition to `data`.\n *\n * @class Response\n */\nexport function Response (data, meta, op) {\n meta || (meta = {})\n\n /**\n * Response data.\n *\n * @name Response#data\n * @type {*}\n */\n this.data = data\n\n utils.fillIn(this, meta)\n\n /**\n * The operation for which the response was created.\n *\n * @name Response#op\n * @type {string}\n */\n this.op = op\n}\n\nconst DEFAULTS = {\n /**\n * Whether to log debugging information.\n *\n * @name Adapter#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\n\n /**\n * Whether to return a more detailed response object.\n *\n * @name Adapter#raw\n * @type {boolean}\n * @default false\n */\n raw: false\n}\n\n/**\n * Abstract class meant to be extended by adapters.\n *\n * @class Adapter\n * @abstract\n * @extends Component\n * @param {Object} [opts] Configuration opts.\n * @param {boolean} [opts.debug=false] Whether to log debugging information.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed response\n * object.\n */\nexport function Adapter (opts) {\n utils.classCallCheck(this, Adapter)\n Component.call(this, opts)\n opts || (opts = {})\n utils.fillIn(opts, DEFAULTS)\n utils.fillIn(this, opts)\n}\n\nComponent.extend({\n constructor: Adapter,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the count.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#afterCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} props The `props` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `afterCount`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCount: noop2,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `afterCreate`\n * @param {Object|Response} response Created record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreate: noop2,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the created records.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#afterCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `afterCreateMany`\n * @param {Object[]|Response} response Created records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterCreateMany: noop2,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#afterDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `afterDestroy`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroy: noop2,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be `undefined`.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#afterDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `afterDestroyAll`\n * @param {undefined|Response} response `undefined` or {@link Response}, depending on the value of `opts.raw`.\n */\n afterDestroyAll: noop2,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found record, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#afterFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `afterFind`\n * @param {Object|Response} response The found record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFind: noop2,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the found records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#afterFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `afterFindAll`\n * @param {Object[]|Response} response The found records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterFindAll: noop2,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the sum.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#afterSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {string} field The `field` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `afterSum`\n * @param {Object|Response} response Count or {@link Response}, depending on the value of `opts.raw`.\n */\n afterSum: noop2,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated record.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#afterUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `afterUpdate`\n * @param {Object|Response} response The updated record or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdate: noop2,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#afterUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `afterUpdateAll`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateAll: noop2,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * If `opts.raw` is `true` then `response` will be a detailed response object, otherwise `response` will be the updated records, if any.\n *\n * `response` may be modified. You can also re-assign `response` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#afterUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} records The `records` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `afterUpdateMany`\n * @param {Object[]|Response} response The updated records or {@link Response}, depending on the value of `opts.raw`.\n */\n afterUpdateMany: noop2,\n\n /**\n * Lifecycle method method called by count.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes count to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by count.\n *\n * @name Adapter#beforeCount\n * @method\n * @param {Object} mapper The `mapper` argument passed to count.\n * @param {Object} query The `query` argument passed to count.\n * @param {Object} opts The `opts` argument passed to count.\n * @property {string} opts.op `beforeCount`\n */\n beforeCount: noop,\n\n /**\n * Lifecycle method method called by create.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes create to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by create.\n *\n * @name Adapter#beforeCreate\n * @method\n * @param {Object} mapper The `mapper` argument passed to create.\n * @param {Object} props The `props` argument passed to create.\n * @param {Object} opts The `opts` argument passed to create.\n * @property {string} opts.op `beforeCreate`\n */\n beforeCreate: noop,\n\n /**\n * Lifecycle method method called by createMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes createMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by createMany.\n *\n * @name Adapter#beforeCreateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to createMany.\n * @param {Object[]} props The `props` argument passed to createMany.\n * @param {Object} opts The `opts` argument passed to createMany.\n * @property {string} opts.op `beforeCreateMany`\n */\n beforeCreateMany: noop,\n\n /**\n * Lifecycle method method called by destroy.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroy to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroy.\n *\n * @name Adapter#beforeDestroy\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroy.\n * @param {(string|number)} id The `id` argument passed to destroy.\n * @param {Object} opts The `opts` argument passed to destroy.\n * @property {string} opts.op `beforeDestroy`\n */\n beforeDestroy: noop,\n\n /**\n * Lifecycle method method called by destroyAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes destroyAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by destroyAll.\n *\n * @name Adapter#beforeDestroyAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to destroyAll.\n * @param {Object} query The `query` argument passed to destroyAll.\n * @param {Object} opts The `opts` argument passed to destroyAll.\n * @property {string} opts.op `beforeDestroyAll`\n */\n beforeDestroyAll: noop,\n\n /**\n * Lifecycle method method called by find.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes find to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by find.\n *\n * @name Adapter#beforeFind\n * @method\n * @param {Object} mapper The `mapper` argument passed to find.\n * @param {(string|number)} id The `id` argument passed to find.\n * @param {Object} opts The `opts` argument passed to find.\n * @property {string} opts.op `beforeFind`\n */\n beforeFind: noop,\n\n /**\n * Lifecycle method method called by findAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes findAll to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by findAll.\n *\n * @name Adapter#beforeFindAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to findAll.\n * @param {Object} query The `query` argument passed to findAll.\n * @param {Object} opts The `opts` argument passed to findAll.\n * @property {string} opts.op `beforeFindAll`\n */\n beforeFindAll: noop,\n\n /**\n * Lifecycle method method called by sum.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes sum to wait for the Promise to resolve before continuing.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by sum.\n *\n * @name Adapter#beforeSum\n * @method\n * @param {Object} mapper The `mapper` argument passed to sum.\n * @param {Object} query The `query` argument passed to sum.\n * @param {Object} opts The `opts` argument passed to sum.\n * @property {string} opts.op `beforeSum`\n */\n beforeSum: noop,\n\n /**\n * Lifecycle method method called by update.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes update to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by update.\n *\n * @name Adapter#beforeUpdate\n * @method\n * @param {Object} mapper The `mapper` argument passed to update.\n * @param {(string|number)} id The `id` argument passed to update.\n * @param {Object} props The `props` argument passed to update.\n * @param {Object} opts The `opts` argument passed to update.\n * @property {string} opts.op `beforeUpdate`\n */\n beforeUpdate: noop,\n\n /**\n * Lifecycle method method called by updateAll.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateAll to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateAll.\n *\n * @name Adapter#beforeUpdateAll\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateAll.\n * @param {Object} props The `props` argument passed to updateAll.\n * @param {Object} query The `query` argument passed to updateAll.\n * @param {Object} opts The `opts` argument passed to updateAll.\n * @property {string} opts.op `beforeUpdateAll`\n */\n beforeUpdateAll: noop,\n\n /**\n * Lifecycle method method called by updateMany.\n *\n * Override this method to add custom behavior for this lifecycle hook.\n *\n * Returning a Promise causes updateMany to wait for the Promise to resolve before continuing.\n *\n * `props` may be modified. You can also re-assign `props` to another value by returning a different value or a Promise that resolves to a different value.\n *\n * A thrown error or rejected Promise will bubble up and reject the Promise returned by updateMany.\n *\n * @name Adapter#beforeUpdateMany\n * @method\n * @param {Object} mapper The `mapper` argument passed to updateMany.\n * @param {Object[]} props The `props` argument passed to updateMany.\n * @param {Object} opts The `opts` argument passed to updateMany.\n * @property {string} opts.op `beforeUpdateMany`\n */\n beforeUpdateMany: noop,\n\n /**\n * Retrieve the number of records that match the selection query. Called by\n * `Mapper#count`.\n *\n * @name Adapter#count\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeCount lifecycle hook\n op = opts.op = 'beforeCount'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'count'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._count(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterCount lifecycle hook\n op = opts.op = 'afterCount'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create a new record. Called by `Mapper#create`.\n *\n * @name Adapter#create\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The record to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'create'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._create(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'create')\n response.created = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Create multiple records in a single batch. Called by `Mapper#createMany`.\n *\n * @name Adapter#createMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The records to be created.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n let op\n props || (props = {})\n opts || (opts = {})\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return utils.resolve(this[op](mapper, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = props.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'createMany'\n this.dbg(op, mapper, props, opts)\n return utils.resolve(this._createMany(mapper, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'createMany')\n response.created = data.length\n response = this.respond(response, opts)\n\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return utils.resolve(this[op](mapper, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the record with the given primary key. Called by\n * `Mapper#destroy`.\n *\n * @name Adapter#destroy\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n let op\n opts || (opts = {})\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'destroy'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._destroy(mapper, id, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroy')\n response = this.respond(response, opts)\n\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Destroy the records that match the selection query. Called by\n * `Mapper#destroyAll`.\n *\n * @name Adapter#destroyAll\n * @method\n * @param {Object} mapper the mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n let op\n query || (query = {})\n opts || (opts = {})\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'destroyAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._destroyAll(mapper, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'destroyAll')\n response = this.respond(response, opts)\n\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Load a belongsTo relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadBelongsTo\n * @method\n * @return {Promise}\n */\n loadBelongsTo (mapper, def, records, __opts) {\n const relationDef = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n const record = records\n return this.find(relationDef, this.makeBelongsToForeignKey(mapper, def, record), __opts)\n .then((relatedItem) => {\n def.setLocalField(record, relatedItem)\n })\n } else {\n const keys = records\n .map((record) => this.makeBelongsToForeignKey(mapper, def, record))\n .filter((key) => key)\n return this.findAll(relationDef, {\n where: {\n [relationDef.idAttribute]: {\n 'in': keys\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((record) => {\n relatedItems.forEach((relatedItem) => {\n if (relatedItem[relationDef.idAttribute] === record[def.foreignKey]) {\n def.setLocalField(record, relatedItem)\n }\n })\n })\n })\n }\n },\n\n /**\n * Retrieve the record with the given primary key. Called by `Mapper#find`.\n *\n * @name Adapter#find\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n let op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return utils.resolve(this[op](mapper, id, opts))\n .then(() => {\n op = opts.op = 'find'\n this.dbg(op, mapper, id, opts)\n return utils.resolve(this._find(mapper, id, opts))\n })\n .then((results) => this.loadRelationsFor(mapper, results, opts))\n .then(([record, meta]) => {\n let response = new Response(record, meta, 'find')\n response.found = record ? 1 : 0\n response = this.respond(response, opts)\n\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return utils.resolve(this[op](mapper, id, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Retrieve the records that match the selection query.\n *\n * @name Adapter#findAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @param {string[]} [opts.with=[]] Relations to eager load.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n let op\n opts || (opts = {})\n opts.with || (opts.with = [])\n\n const activeWith = opts._activeWith\n\n if (utils.isObject(activeWith)) {\n const activeQuery = activeWith.query || {}\n if (activeWith.replace) {\n query = activeQuery\n } else {\n utils.deepFillIn(query, activeQuery)\n }\n }\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return utils.resolve(this[op](mapper, query, opts))\n .then(() => {\n op = opts.op = 'findAll'\n this.dbg(op, mapper, query, opts)\n return utils.resolve(this._findAll(mapper, query, opts))\n })\n .then((results) => this.loadRelationsFor(mapper, results, opts))\n .then(([records, meta]) => {\n let response = new Response(records, meta, 'findAll')\n response.found = records.length\n response = this.respond(response, opts)\n\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return utils.resolve(this[op](mapper, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n loadRelationsFor (mapper, results, opts) {\n const [records] = results\n const tasks = []\n\n if (records) {\n utils.forEachRelation(mapper, opts, (def, __opts) => {\n let task\n if (def.foreignKey && (def.type === 'hasOne' || def.type === 'hasMany')) {\n if (def.type === 'hasOne') {\n task = this.loadHasOne(mapper, def, records, __opts)\n } else {\n task = this.loadHasMany(mapper, def, records, __opts)\n }\n } else if (def.type === 'hasMany' && def.localKeys) {\n task = this.loadHasManyLocalKeys(mapper, def, records, __opts)\n } else if (def.type === 'hasMany' && def.foreignKeys) {\n task = this.loadHasManyForeignKeys(mapper, def, records, __opts)\n } else if (def.type === 'belongsTo') {\n task = this.loadBelongsTo(mapper, def, records, __opts)\n }\n if (task) {\n tasks.push(task)\n }\n })\n }\n\n return utils.Promise.all(tasks)\n .then(() => results)\n },\n\n /**\n * Resolve the value of the specified option based on the given options and\n * this adapter's settings. Override with care.\n *\n * @name Adapter#getOpt\n * @method\n * @param {string} opt The name of the option.\n * @param {Object} [opts] Configuration options.\n * @return {*} The value of the specified option.\n */\n getOpt (opt, opts) {\n opts || (opts = {})\n return opts[opt] === undefined ? utils.plainCopy(this[opt]) : utils.plainCopy(opts[opt])\n },\n\n /**\n * Load a hasMany relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasMany\n * @method\n * @return {Promise}\n */\n loadHasMany (mapper, def, records, __opts) {\n let singular = false\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n singular = true\n records = [records]\n }\n const IDs = records.map((record) => this.makeHasManyForeignKey(mapper, def, record))\n const query = {\n where: {}\n }\n const criteria = query.where[def.foreignKey] = {}\n if (singular) {\n // more efficient query when we only have one record\n criteria['=='] = IDs[0]\n } else {\n criteria['in'] = IDs.filter((id) => id)\n }\n return this.findAll(def.getRelation(), query, __opts).then((relatedItems) => {\n records.forEach((record) => {\n let attached = []\n // avoid unneccesary iteration when we only have one record\n if (singular) {\n attached = relatedItems\n } else {\n relatedItems.forEach((relatedItem) => {\n if (utils.get(relatedItem, def.foreignKey) === record[mapper.idAttribute]) {\n attached.push(relatedItem)\n }\n })\n }\n def.setLocalField(record, attached)\n })\n })\n },\n\n loadHasManyLocalKeys (mapper, def, records, __opts) {\n let record\n const relatedMapper = def.getRelation()\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': this.makeHasManyLocalKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n let localKeys = []\n records.forEach((record) => {\n localKeys = localKeys.concat(this.makeHasManyLocalKeys(mapper, def, record))\n })\n return this.findAll(relatedMapper, {\n where: {\n [relatedMapper.idAttribute]: {\n 'in': unique(localKeys).filter((x) => x)\n }\n }\n }, __opts).then((relatedItems) => {\n records.forEach((item) => {\n let attached = []\n let itemKeys = utils.get(item, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n relatedItems.forEach((relatedItem) => {\n if (itemKeys && itemKeys.indexOf(relatedItem[relatedMapper.idAttribute]) !== -1) {\n attached.push(relatedItem)\n }\n })\n def.setLocalField(item, attached)\n })\n return relatedItems\n })\n }\n },\n\n loadHasManyForeignKeys (mapper, def, records, __opts) {\n const relatedMapper = def.getRelation()\n const idAttribute = mapper.idAttribute\n let record\n\n if (utils.isObject(records) && !utils.isArray(records)) {\n record = records\n }\n\n if (record) {\n return this.findAll(def.getRelation(), {\n where: {\n [def.foreignKeys]: {\n 'contains': this.makeHasManyForeignKeys(mapper, def, record)\n }\n }\n }, __opts).then((relatedItems) => {\n def.setLocalField(record, relatedItems)\n })\n } else {\n return this.findAll(relatedMapper, {\n where: {\n [def.foreignKeys]: {\n 'isectNotEmpty': records.map((record) => this.makeHasManyForeignKeys(mapper, def, record))\n }\n }\n }, __opts).then((relatedItems) => {\n const foreignKeysField = def.foreignKeys\n records.forEach((record) => {\n const _relatedItems = []\n const id = utils.get(record, idAttribute)\n relatedItems.forEach((relatedItem) => {\n const foreignKeys = utils.get(relatedItems, foreignKeysField) || []\n if (foreignKeys.indexOf(id) !== -1) {\n _relatedItems.push(relatedItem)\n }\n })\n def.setLocalField(record, _relatedItems)\n })\n })\n }\n },\n\n /**\n * Load a hasOne relationship.\n *\n * Override with care.\n *\n * @name Adapter#loadHasOne\n * @method\n * @return {Promise}\n */\n loadHasOne (mapper, def, records, __opts) {\n if (utils.isObject(records) && !utils.isArray(records)) {\n records = [records]\n }\n return this.loadHasMany(mapper, def, records, __opts).then(() => {\n records.forEach((record) => {\n const relatedData = def.getLocalField(record)\n if (utils.isArray(relatedData) && relatedData.length) {\n def.setLocalField(record, relatedData[0])\n }\n })\n })\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * There may be reasons why you may want to override this method, like when\n * the id of the parent doesn't exactly match up to the key on the child.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKey\n * @method\n * @return {*}\n */\n makeHasManyForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Return the localKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyLocalKeys\n * @method\n * @return {*}\n */\n makeHasManyLocalKeys (mapper, def, record) {\n let localKeys = []\n let itemKeys = utils.get(record, def.localKeys) || []\n itemKeys = utils.isArray(itemKeys) ? itemKeys : Object.keys(itemKeys)\n localKeys = localKeys.concat(itemKeys)\n return unique(localKeys).filter((x) => x)\n },\n\n /**\n * Return the foreignKeys from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeHasManyForeignKeys\n * @method\n * @return {*}\n */\n makeHasManyForeignKeys (mapper, def, record) {\n return utils.get(record, mapper.idAttribute)\n },\n\n /**\n * Return the foreignKey from the given record for the provided relationship.\n *\n * Override with care.\n *\n * @name Adapter#makeBelongsToForeignKey\n * @method\n * @return {*}\n */\n makeBelongsToForeignKey (mapper, def, record) {\n return def.getForeignKey(record)\n },\n\n /**\n * Retrieve sum of the specified field of the records that match the selection\n * query. Called by `Mapper#sum`.\n *\n * @name Adapter#sum\n * @method\n * @param {Object} mapper The mapper.\n * @param {string} field By to sum.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n let op\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n query || (query = {})\n opts || (opts = {})\n\n // beforeSum lifecycle hook\n op = opts.op = 'beforeSum'\n return utils.resolve(this[op](mapper, field, query, opts))\n .then(() => {\n // Allow for re-assignment from lifecycle hook\n op = opts.op = 'sum'\n this.dbg(op, mapper, field, query, opts)\n return utils.resolve(this._sum(mapper, field, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, op)\n response = this.respond(response, opts)\n\n // afterSum lifecycle hook\n op = opts.op = 'afterSum'\n return utils.resolve(this[op](mapper, field, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name Adapter#respond\n * @method\n * @param {Object} response Response object.\n * @param {Object} opts Configuration options.\n * return {Object} If `opts.raw == true` then return `response`, else return\n * `response.data`.\n */\n respond (response, opts) {\n return this.getOpt('raw', opts) ? response : response.data\n },\n\n /**\n * Apply the given update to the record with the specified primary key. Called\n * by `Mapper#update`.\n *\n * @name Adapter#update\n * @method\n * @param {Object} mapper The mapper.\n * @param {(string|number)} id The primary key of the record to be updated.\n * @param {Object} props The update to apply to the record.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n props || (props = {})\n opts || (opts = {})\n let op\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return utils.resolve(this[op](mapper, id, props, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'update'\n this.dbg(op, mapper, id, props, opts)\n return utils.resolve(this._update(mapper, id, props, opts))\n })\n .then((results) => {\n let [data, result] = results\n result || (result = {})\n let response = new Response(data, result, 'update')\n response.updated = data ? 1 : 0\n response = this.respond(response, opts)\n\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return utils.resolve(this[op](mapper, id, props, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Apply the given update to all records that match the selection query.\n * Called by `Mapper#updateAll`.\n *\n * @name Adapter#updateAll\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object} props The update to apply to the selected records.\n * @param {Object} [query] Selection query.\n * @param {Object} [query.where] Filtering criteria.\n * @param {string|Array} [query.orderBy] Sorting criteria.\n * @param {string|Array} [query.sort] Same as `query.sort`.\n * @param {number} [query.limit] Limit results.\n * @param {number} [query.skip] Offset results.\n * @param {number} [query.offset] Same as `query.skip`.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n props || (props = {})\n query || (query = {})\n opts || (opts = {})\n let op\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts))\n .then((_props) => {\n // Allow for re-assignment from lifecycle hook\n props = _props === undefined ? props : _props\n props = withoutRelations(mapper, props, opts)\n op = opts.op = 'updateAll'\n this.dbg(op, mapper, props, query, opts)\n return utils.resolve(this._updateAll(mapper, props, query, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateAll')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return utils.resolve(this[op](mapper, props, query, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Update the given records in a single batch. Called by `Mapper#updateMany`.\n *\n * @name Adapter#updateMany\n * @method\n * @param {Object} mapper The mapper.\n * @param {Object[]} records The records to update.\n * @param {Object} [opts] Configuration options.\n * @param {boolean} [opts.raw=false] Whether to return a more detailed\n * response object.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n records || (records = [])\n opts || (opts = {})\n let op\n const idAttribute = mapper.idAttribute\n\n records = records.filter((record) => utils.get(record, idAttribute))\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return utils.resolve(this[op](mapper, records, opts))\n .then((_records) => {\n // Allow for re-assignment from lifecycle hook\n records = _records === undefined ? records : _records\n records = records.map((record) => withoutRelations(mapper, record, opts))\n op = opts.op = 'updateMany'\n this.dbg(op, mapper, records, opts)\n return utils.resolve(this._updateMany(mapper, records, opts))\n })\n .then((results) => {\n let [data, result] = results\n data || (data = [])\n result || (result = {})\n let response = new Response(data, result, 'updateMany')\n response.updated = data.length\n response = this.respond(response, opts)\n\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return utils.resolve(this[op](mapper, records, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n }\n})\n\n/**\n * Create a subclass of this Adapter:\n *\n * @example Adapter.extend\n * // Normally you would do: import {Adapter} from 'js-data'\n * const JSData = require('js-data@3.0.0-beta.10')\n * const {Adapter} = JSData\n * console.log('Using JSData v' + JSData.version.full)\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomAdapterClass extends Adapter {\n * foo () { return 'bar' }\n * static beep () { return 'boop' }\n * }\n * const customAdapter = new CustomAdapterClass()\n * console.log(customAdapter.foo())\n * console.log(CustomAdapterClass.beep())\n *\n * // Extend the class using alternate method.\n * const OtherAdapterClass = Adapter.extend({\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const otherAdapter = new OtherAdapterClass()\n * console.log(otherAdapter.foo())\n * console.log(OtherAdapterClass.beep())\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherAdapterClass () {\n * Adapter.call(this)\n * this.created_at = new Date().getTime()\n * }\n * Adapter.extend({\n * constructor: AnotherAdapterClass,\n * foo () { return 'bar' }\n * }, {\n * beep () { return 'boop' }\n * })\n * const anotherAdapter = new AnotherAdapterClass()\n * console.log(anotherAdapter.created_at)\n * console.log(anotherAdapter.foo())\n * console.log(AnotherAdapterClass.beep())\n *\n * @method Adapter.extend\n * @param {Object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {Object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {Object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this Adapter class.\n */\n","import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n hasFetch: hasFetch,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n if (timeout !== undefined) {\n config.timeout = timeout\n }\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n if ((this.useFetch || opts.useFetch)) {\n if (!hasFetch) {\n throw new Error('Attempting to use window.fetch, but it is not available!')\n }\n } else {\n throw new Error('You have not configured this adapter with an http library!')\n }\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n const httpConfig = utils.plainCopy(config)\n delete httpConfig.adapter\n return this.http(httpConfig).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["noop","args","opts","length","dbg","op","utils","resolve","noop2","unique","array","seen","final","forEach","item","push","withoutRelations","mapper","props","with","relationFields","toStrip","filter","value","indexOf","omit","Response","data","meta","fillIn","DEFAULTS","Adapter","classCallCheck","call","Component","extend","query","then","_count","results","result","response","respond","_response","undefined","_props","_create","created","map","record","_createMany","id","_destroy","_destroyAll","def","records","__opts","relationDef","getRelation","isObject","isArray","find","makeBelongsToForeignKey","relatedItem","setLocalField","keys","key","findAll","idAttribute","relatedItems","foreignKey","_find","loadRelationsFor","found","activeWith","_activeWith","activeQuery","replace","deepFillIn","_findAll","tasks","forEachRelation","task","type","loadHasOne","loadHasMany","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadBelongsTo","Promise","all","opt","plainCopy","singular","IDs","makeHasManyForeignKey","criteria","where","attached","get","relatedMapper","makeHasManyLocalKeys","concat","x","itemKeys","Object","makeHasManyForeignKeys","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","field","isString","Error","_sum","getOpt","_update","updated","_updateAll","_records","_updateMany","hasFetch","window","fetch","e","isValidString","join","items","separator","makePath","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","v","toString","toISOString","toJson","axios","HttpAdapter","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","count","suffix","getSuffix","deepMixIn","queryTransform","prototype","create","createMany","config","method","_config","HTTP","isFunction","hasOwnProperty","destroy","destroyAll","console","error","requestConfig","Headers","headers","body","json","isUndefined","relationList","endpoint","name","parent","parentKey","parentDef","parentId","_opts","_","getEndpoint","basePath","isNumber","apply","copy","start","Date","payload","cache","timeout","httpConfig","forceTrailingSlash","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","reject","http","useFetch","beforeHTTP","adapter","catch","err","responseError","afterHTTP","sum","update","updateAll","updateMany","addAction","TypeError","request","getAdapter","defaultAdapter","isSorN","pathname","addActions","version"],"mappings":"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"} \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js b/fetch/dist/js-data-fetch.min.js index 668d5fe..59ad8db 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,10 +1,10 @@ /*! * js-data-fetch -* @version 3.0.0-rc.3 - Homepage +* @version 3.0.0 - Homepage * @copyright (c) 2014-2016 js-data-http project authors * @license MIT * * @overview HTTP adapter for js-data that uses the fetch API. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function n(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function r(t){e.utils.classCallCheck(this,r),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,b),e.utils.fillIn(this,t)}function i(t){return null!=t&&""!==t}function o(t,e){return e||(e=""),t.filter(i).join(e)}function a(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(t.indexOf("?")===-1?"?":"&")+r.join("&")),t}function l(t){e.utils.classCallCheck(this,l),t||(t={}),e.utils.fillIn(t,P),r.call(this,t)}function f(t,n){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof t?"undefined":h(t)));return function(r){if(r[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return n.request=n.request||function(t){return t},n.response=n.response||function(t){return t},n.responseError=n.responseError||function(t){return e.utils.reject(t)},r[t]=function(r,i){var o=this;i=i||{},e.utils.isObject(r)&&(i=r),e.utils.fillIn(i,n);var u=this.getAdapter(i.adapter||this.defaultAdapter||"http"),s={};if(s.mapper=this.name,e.utils.deepMixIn(s,i),s.method=s.method||"GET","function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var l=[i.basePath||this.basePath||u.basePath,u.getEndpoint(this,r,i)];e.utils.isSorN(r)&&l.push(r),l.push(n.pathname||t),s.url=a.apply(null,l)}return e.utils.resolve(s).then(i.request).then(function(t){return u.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response,i.responseError)},r}}function c(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){f(e,t)(n)}),n}}var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},d=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},p=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),v=function(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http)throw new Error("You have not configured this adapter with an http library!");return e.utils.resolve(this.beforeHTTP(t,n)).then(function(e){return t=e||t,A&&(r.useFetch||n.useFetch||!r.http)?r.fetch(t,n).then(l,l):r.http(t).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},PUT:function(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(u){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,u)).then(function(t){return void 0===t?u:t})})},queryTransform:function(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function(t,n,r){return e.utils.reject(t)},serialize:function(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function(t,n,i,o){if(i||(i={}),o||(o={}),!e.utils.isString(n))throw new Error("field must be a string!");return o.params=this.getParams(o),o.params.sum=n,o.suffix=this.getSuffix(t,o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),r.prototype.sum.call(this,t,n,i,o)},update:function(t,e,n,i){return i||(i={}),i.params=this.getParams(i),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),r.prototype.update.call(this,t,e,n,i)},updateAll:function(t,n,i,o){return i||(i={}),o||(o={}),o.params=this.getParams(o),e.utils.deepMixIn(o.params,i),o.params=this.queryTransform(t,o.params,o),o.suffix=this.getSuffix(t,o),r.prototype.updateAll.call(this,t,n,i,o)},updateMany:function(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),r.prototype.updateMany.call(this,t,e,n)}});var M={full:"3.0.0-rc.3",major:3,minor:0,patch:0};t.HttpAdapter=l,t.addAction=f,t.addActions=c,t.version=M,Object.defineProperty(t,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("js-data")):"function"==typeof define&&define.amd?define("js-data-fetch",["exports","js-data"],e):e(t.JSDataHttp=t.JSDataHttp||{},t.JSData)}(this,function(t,e){"use strict";function Response(t,n,r){n||(n={}),this.data=t,e.utils.fillIn(this,n),this.op=r}function Adapter(t){e.utils.classCallCheck(this,Adapter),e.Component.call(this,t),t||(t={}),e.utils.fillIn(t,l),e.utils.fillIn(this,t)}function isValidString(t){return null!=t&&""!==t}function join(t,e){return e||(e=""),t.filter(isValidString).join(e)}function makePath(){for(var t=arguments.length,e=Array(t),n=0;n0&&(t+=(-1===t.indexOf("?")?"?":"&")+r.join("&")),t}function HttpAdapter(t){e.utils.classCallCheck(this,HttpAdapter),t||(t={}),e.utils.fillIn(t,d),Adapter.call(this,t)}function addAction(t,r){if(!t||!e.utils.isString(t))throw new TypeError("action(name[, opts]): Expected: string, Found: "+(void 0===t?"undefined":n(t)));return function(n){if(n[t])throw new Error("action(name[, opts]): "+t+" already exists on target!");return r.request=r.request||function(t){return t},r.response=r.response||function(t){return t},r.responseError=r.responseError||function(t){return e.utils.reject(t)},n[t]=function(n,i){var o=this;i=i||{},e.utils.isObject(n)&&(i=n),e.utils.fillIn(i,r);var a=this.getAdapter(i.adapter||this.defaultAdapter||"http"),s={};if(s.mapper=this.name,e.utils.deepMixIn(s,i),s.method=s.method||"GET","function"==typeof i.getEndpoint)s.url=i.getEndpoint(this,i);else{var u=[i.basePath||this.basePath||a.basePath,a.getEndpoint(this,n,i)];e.utils.isSorN(n)&&u.push(n),u.push(r.pathname||t),s.url=makePath.apply(null,u)}return e.utils.resolve(s).then(i.request).then(function(t){return a.HTTP(t)}).then(function(t){return t&&t.config&&(t.config.mapper=o.name),t}).then(i.response,i.responseError)},n}}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},i=function(){function sliceIterator(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return sliceIterator(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function noop(){for(var t=arguments.length,n=Array(t),r=0;r=200&&n.status<300?(r.log&&r.dbg(o,n),n):(r.error&&r.error("'FAILED: "+o,n),e.utils.reject(n))};if(!this.http){if(!this.useFetch&&!n.useFetch)throw new Error("You have not configured this adapter with an http library!");if(!f)throw new Error("Attempting to use window.fetch, but it is not available!")}return e.utils.resolve(this.beforeHTTP(t,n)).then(function(i){if(t=i||t,f&&(r.useFetch||n.useFetch||!r.http))return r.fetch(t,n).then(l,l);var o=e.utils.plainCopy(t);return delete o.adapter,r.http(o).then(l,l).catch(function(e){return r.responseError(e,t,n)})}).then(function(i){return e.utils.resolve(r.afterHTTP(t,n,i)).then(function(t){return void 0===t?i:t})})},POST:function POST(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"post",a=i.op="beforePOST",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="POST",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPOST",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},PUT:function PUT(t,n,r,i){var o=this,a=void 0;return r||(r={}),i||(i={}),r.url=t||r.url,r.data=n||r.data,r.method=r.method||"put",a=i.op="beforePUT",e.utils.resolve(this[a](t,n,r,i)).then(function(e){return r=void 0===e?r:e,a=i.op="PUT",o.dbg(a,t,n,r,i),o.HTTP(r,i)}).then(function(s){return a=i.op="afterPUT",e.utils.resolve(o[a](t,n,r,i,s)).then(function(t){return void 0===t?s:t})})},queryTransform:function queryTransform(t,n,r){return r||(r={}),e.utils.isFunction(r.queryTransform)?r.queryTransform(t,n,r):e.utils.isFunction(t.queryTransform)?t.queryTransform(t,n,r):n},responseError:function responseError(t,n,r){return e.utils.reject(t)},serialize:function serialize(t,n,r){return r||(r={}),e.utils.isFunction(r.serialize)?r.serialize(t,n,r):e.utils.isFunction(t.serialize)?t.serialize(t,n,r):n},sum:function sum(t,n,r,i){if(r||(r={}),i||(i={}),!e.utils.isString(n))throw new Error("field must be a string!");return i.params=this.getParams(i),i.params.sum=n,i.suffix=this.getSuffix(t,i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),Adapter.prototype.sum.call(this,t,n,r,i)},update:function update(t,e,n,r){return r||(r={}),r.params=this.getParams(r),r.params=this.queryTransform(t,r.params,r),r.suffix=this.getSuffix(t,r),Adapter.prototype.update.call(this,t,e,n,r)},updateAll:function updateAll(t,n,r,i){return r||(r={}),i||(i={}),i.params=this.getParams(i),e.utils.deepMixIn(i.params,r),i.params=this.queryTransform(t,i.params,i),i.suffix=this.getSuffix(t,i),Adapter.prototype.updateAll.call(this,t,n,r,i)},updateMany:function updateMany(t,e,n){return n||(n={}),n.params=this.getParams(n),n.params=this.queryTransform(t,n.params,n),n.suffix=this.getSuffix(t,n),Adapter.prototype.updateMany.call(this,t,e,n)}});var c={full:"3.0.0",major:3,minor:0,patch:0};t.HttpAdapter=HttpAdapter,t.addAction=addAction,t.addActions=function addActions(t){return t||(t={}),function(n){return e.utils.forOwn(t,function(t,e){addAction(e,t)(n)}),n}},t.version=c,Object.defineProperty(t,"__esModule",{value:!0})}); //# sourceMappingURL=js-data-fetch.min.map \ No newline at end of file diff --git a/fetch/dist/js-data-fetch.min.js.map b/fetch/dist/js-data-fetch.min.js.map new file mode 100644 index 0000000..d641212 --- /dev/null +++ b/fetch/dist/js-data-fetch.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["fetch/dist/js-data-fetch.js"],"names":["global","factory","exports","module","require","define","amd","JSDataHttp","JSData","this","jsData","Response","data","meta","op","utils","fillIn","Adapter","opts","classCallCheck","Component","call","DEFAULTS$1","isValidString","value","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","isArray","forEach","v","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","DEFAULTS","addAction","name","isString","TypeError","_typeof","mapper","Error","request","config","response","responseError","err","reject","id","_opts","_this18","adapter","getAdapter","defaultAdapter","deepMixIn","method","getEndpoint","basePath","isSorN","pathname","apply","resolve","then","HTTP","Symbol","iterator","obj","constructor","prototype","defineProperty","Object","enumerable","configurable","writable","slicedToArray","sliceIterator","arr","i","_arr","_n","_d","_e","undefined","_s","_i","next","done","noop","dbg","concat","noop2","_len2","_key2","unique","array","seen","final","item","withoutRelations","props","with","toStrip","relationFields","omit","debug","raw","extend","afterCount","afterCreate","afterCreateMany","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterSum","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCount","beforeCreate","beforeCreateMany","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeSum","beforeUpdate","beforeUpdateAll","beforeUpdateMany","count","query","_this","_count","results","_results","result","respond","_response","create","_this2","_props","_create","_results2","created","createMany","_this3","map","record","_createMany","_results3","destroy","_this4","_destroy","_results4","destroyAll","_this5","_destroyAll","_results5","loadBelongsTo","def","records","__opts","_this6","relationDef","getRelation","find","makeBelongsToForeignKey","relatedItem","setLocalField","keys","findAll","where","idAttribute","in","relatedItems","foreignKey","_this7","_find","loadRelationsFor","_ref","_ref2","found","_this8","activeWith","_activeWith","activeQuery","deepFillIn","_findAll","_ref3","_ref4","_this9","tasks","forEachRelation","task","type","localKeys","loadHasManyLocalKeys","foreignKeys","loadHasManyForeignKeys","loadHasOne","loadHasMany","Promise","all","getOpt","opt","plainCopy","_this10","singular","IDs","makeHasManyForeignKey","criteria","attached","get","_this11","relatedMapper","makeHasManyLocalKeys","x","itemKeys","_this12","contains","makeHasManyForeignKeys","isectNotEmpty","foreignKeysField","_relatedItems","relatedData","getLocalField","getForeignKey","sum","field","_this13","_sum","_results7","update","_this14","_update","_results8","updated","updateAll","_this15","_updateAll","_results9","updateMany","_this16","_records","_updateMany","_results10","hasFetch","window","fetch","e","forceTrailingSlash","http","httpConfig","suffix","useFetch","afterDEL","afterGET","afterHTTP","afterPOST","afterPUT","beforeDEL","beforeGET","beforeHTTP","beforePOST","beforePUT","GET","getPath","_end","POST","serialize","DEL","deserialize","PUT","getParams","getSuffix","queryTransform","_config","isFunction","hasOwnProperty","error","console","_console","_fetch","_x","requestConfig","headers","Headers","body","json","isUndefined","relationList","endpoint","parent","parentKey","parentDef","parentId","_","isNumber","copy","start","Date","payload","cache","timeout","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","catch","_this17","version","full","major","minor","patch","addActions"],"mappings":"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"} \ No newline at end of file diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index c888f46..7301352 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -8,7 +8,7 @@ var jsDataAdapter = require('js-data-adapter'); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var axios = require('axios'); @@ -31,7 +31,7 @@ function makePath() { } var result = join(args, '/'); - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); + return result.replace(/([^:/]|^)\/{2,}/g, '$1/'); } function encode(val) { @@ -95,6 +95,8 @@ var DEFAULTS = { */ forceTrailingSlash: false, + hasFetch: hasFetch, + /** * The HTTP function that actually makes the HTTP request. By default this is * `axios`. @@ -135,41 +137,40 @@ var DEFAULTS = { * @see http://www.js-data.io/docs/js-data-http#using-windowfetch */ useFetch: false -}; -/** - * HttpAdapter class. - * - * @example - * import { DataStore } from 'js-data'; - * import { HttpAdapter } from 'js-data-http'; - * - * const httpAdapter = new HttpAdapter(); - * const store = new DataStore(); - * - * store.registerAdapter('http', httpAdapter, { 'default': true }); - * - * store.defineMapper('school'); - * store.defineMapper('student'); - * - * // GET /school/1 - * store.find('school', 1).then((school) => { - * console.log('school'); - * }); - * - * @class HttpAdapter - * @extends Adapter - * @param {object} [opts] Configuration options. - * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. - * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. - * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. - * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. - * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. - * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. - * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. - * @see http://www.js-data.io/docs/js-data-http - */ -function HttpAdapter(opts) { + /** + * HttpAdapter class. + * + * @example + * import { DataStore } from 'js-data'; + * import { HttpAdapter } from 'js-data-http'; + * + * const httpAdapter = new HttpAdapter(); + * const store = new DataStore(); + * + * store.registerAdapter('http', httpAdapter, { 'default': true }); + * + * store.defineMapper('school'); + * store.defineMapper('student'); + * + * // GET /school/1 + * store.find('school', 1).then((school) => { + * console.log('school'); + * }); + * + * @class HttpAdapter + * @extends Adapter + * @param {object} [opts] Configuration options. + * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}. + * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}. + * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}. + * @param {object} [opts.http=axios] See {@link HttpAdapter#http}. + * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}. + * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}. + * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}. + * @see http://www.js-data.io/docs/js-data-http + */ +};function HttpAdapter(opts) { jsData.utils.classCallCheck(this, HttpAdapter); opts || (opts = {}); @@ -724,20 +725,14 @@ jsDataAdapter.Adapter.extend({ } if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - jsData.utils.forOwn(opts, function (value, key) { - _opts[key] = value; - }); - jsData.utils._(_opts, parentDef); - endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); - return { - v: false - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; + delete opts.endpoint; + var _opts = {}; + jsData.utils.forOwn(opts, function (value, key) { + _opts[key] = value; + }); + jsData.utils._(_opts, parentDef); + endpoint = makePath(_this14.getEndpoint(parentDef, parentId, _opts), parentId, endpoint); + return false; } } }); @@ -802,7 +797,9 @@ jsDataAdapter.Adapter.extend({ config = jsData.utils.deepMixIn(config, this.httpConfig); config.data = payload; config.cache = cache; - config.timeout = timeout; + if (timeout !== undefined) { + config.timeout = timeout; + } if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { config.url += '/'; } @@ -828,7 +825,13 @@ jsDataAdapter.Adapter.extend({ }; if (!this.http) { - throw new Error('You have not configured this adapter with an http library!'); + if (this.useFetch || opts.useFetch) { + if (!hasFetch) { + throw new Error('Attempting to use window.fetch, but it is not available!'); + } + } else { + throw new Error('You have not configured this adapter with an http library!'); + } } return jsData.utils.resolve(this.beforeHTTP(config, opts)).then(function (_config) { @@ -836,7 +839,9 @@ jsDataAdapter.Adapter.extend({ if (hasFetch && (_this15.useFetch || opts.useFetch || !_this15.http)) { return _this15.fetch(config, opts).then(logResponse, logResponse); } - return _this15.http(config).then(logResponse, logResponse).catch(function (err) { + var httpConfig = jsData.utils.plainCopy(config); + delete httpConfig.adapter; + return _this15.http(httpConfig).then(logResponse, logResponse).catch(function (err) { return _this15.responseError(err, config, opts); }); }).then(function (response) { @@ -1246,12 +1251,95 @@ function addActions(opts) { * otherwise `false` if the current version is not beta. */ var version = { - full: '3.0.0-rc.3', + full: '3.0.0', major: 3, minor: 0, patch: 0 }; +/** + * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http` + * that works on Node.js is registered in NPM as `js-data-http-node`. The build + * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower + * as `js-data-fetch`. + * + * @example Script tag + * var HttpAdapter = window.JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example CommonJS + * var HttpAdapter = require('js-data-Http').HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * @example ES2015 Modules + * import { HttpAdapter } from 'js-data-Http'; + * const httpAdapter = new HttpAdapter(); + * + * @example AMD + * define('myApp', ['js-data-Http'], function (JSDataHttp) { + * var HttpAdapter = JSDataHttp.HttpAdapter; + * var httpAdapter = new HttpAdapter(); + * + * // ... + * }); + * + * @module js-data-http + */ + +/** + * Create a subclass of this HttpAdapter: + * @example HttpAdapter.extend + * // Normally you would do: import { HttpAdapter } from 'js-data-http'; + * // or: import { HttpAdapter } from 'js-data-http-node'; + * const JSDataHttp = require('js-data-http-node'); + * const { HttpAdapter } = JSDataHttp; + * console.log('Using JSDataHttp v' + JSDataHttp.version.full); + * + * // Extend the class using ES2015 class syntax. + * class CustomHttpAdapterClass extends HttpAdapter { + * foo () { return 'bar'; } + * static beep () { return 'boop'; } + * } + * const customHttpAdapter = new CustomHttpAdapterClass(); + * console.log(customHttpAdapter.foo()); + * console.log(CustomHttpAdapterClass.beep()); + * + * // Extend the class using alternate method. + * const OtherHttpAdapterClass = HttpAdapter.extend({ + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const otherHttpAdapter = new OtherHttpAdapterClass(); + * console.log(otherHttpAdapter.foo()); + * console.log(OtherHttpAdapterClass.beep()); + * + * // Extend the class, providing a custom constructor. + * function AnotherHttpAdapterClass () { + * HttpAdapter.call(this); + * this.created_at = new Date().getTime(); + * } + * HttpAdapter.extend({ + * constructor: AnotherHttpAdapterClass, + * foo () { return 'bar'; } + * }, { + * beep () { return 'boop'; } + * }) + * const anotherHttpAdapter = new AnotherHttpAdapterClass(); + * console.log(anotherHttpAdapter.created_at); + * console.log(anotherHttpAdapter.foo()); + * console.log(AnotherHttpAdapterClass.beep()); + * + * @method HttpAdapter.extend + * @param {object} [props={}] Properties to add to the prototype of the + * subclass. + * @param {object} [props.constructor] Provide a custom constructor function + * to be used as the subclass itself. + * @param {object} [classProps={}] Static properties to add to the subclass. + * @returns {Constructor} Subclass of this HttpAdapter class. + * @since 3.0.0 + */ + exports.HttpAdapter = HttpAdapter; exports.addAction = addAction; exports.addActions = addActions; diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index 8793147..c35dc19 100644 --- a/node/dist/js-data-http-node.js.map +++ b/node/dist/js-data-http-node.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../../src/index.js"],"sourcesContent":["import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:\\/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n config.timeout = timeout\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n throw new Error('You have not configured this adapter with an http library!')\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n return this.http(config).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["utils","Adapter","noop2","noop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js-data-http-node.js","sources":["../../src/index.js"],"sourcesContent":["import { utils } from 'js-data'\nimport axios from '../node_modules/axios/dist/axios'\nimport {\n Adapter,\n noop,\n noop2\n} from '../node_modules/js-data-adapter/src/index'\n\nlet hasFetch = false\n\ntry {\n hasFetch = window && window.fetch\n} catch (e) {}\n\nfunction isValidString (value) {\n return (value != null && value !== '')\n}\nfunction join (items, separator) {\n separator || (separator = '')\n return items.filter(isValidString).join(separator)\n}\nfunction makePath (...args) {\n let result = join(args, '/')\n return result.replace(/([^:/]|^)\\/{2,}/g, '$1/')\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nfunction buildUrl (url, params) {\n if (!params) {\n return url\n }\n\n const parts = []\n\n utils.forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!utils.isArray(val)) {\n val = [val]\n }\n\n val.forEach(function (v) {\n if (toString.call(v) === '[object Date]') {\n v = v.toISOString()\n } else if (utils.isObject(v)) {\n v = utils.toJson(v)\n }\n parts.push(`${encode(key)}=${encode(v)}`)\n })\n })\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&')\n }\n\n return url\n}\n\nconst DEFAULTS = {\n /**\n * Set a base path in order to use absolute URLs instead of relative URLs.\n *\n * @example\n * const httpAdapter = new HttpAdapter({\n * basePath: 'https://mydomain.com'\n * });\n *\n * @name HttpAdapter#basePath\n * @type {string}\n * @since 3.0.0\n */\n basePath: '',\n\n /**\n * Ensure that the request url has a trailing forward slash.\n *\n * @name HttpAdapter#forceTrailingSlash\n * @type {boolean}\n * @default false\n * @since 3.0.0\n */\n forceTrailingSlash: false,\n\n hasFetch: hasFetch,\n\n /**\n * The HTTP function that actually makes the HTTP request. By default this is\n * `axios`.\n *\n * @name HttpAdapter#http\n * @type {function}\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-a-custom-http-library\n */\n http: axios,\n\n /**\n * Default configuration options to be mixed into the `config` argument passed\n * to {@link HttpAdapter#http}.\n *\n * @name HttpAdapter#httpConfig\n * @type {object}\n * @since 3.0.0\n */\n httpConfig: {},\n\n /**\n * Add a suffix to the request url, e.g. \".json\".\n *\n * @name HttpAdapter#suffix\n * @type {string}\n * @since 3.0.0\n */\n suffix: '',\n\n /**\n * Use `window.fetch` if available.\n *\n * @name HttpAdapter#useFetch\n * @type {boolean}\n * @default false\n * @since 3.0.0\n * @see http://www.js-data.io/docs/js-data-http#using-windowfetch\n */\n useFetch: false\n}\n\n/**\n * HttpAdapter class.\n *\n * @example\n * import { DataStore } from 'js-data';\n * import { HttpAdapter } from 'js-data-http';\n *\n * const httpAdapter = new HttpAdapter();\n * const store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n *\n * store.defineMapper('school');\n * store.defineMapper('student');\n *\n * // GET /school/1\n * store.find('school', 1).then((school) => {\n * console.log('school');\n * });\n *\n * @class HttpAdapter\n * @extends Adapter\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.basePath=''] See {@link HttpAdapter#basePath}.\n * @param {boolean} [opts.debug=false] See {@link HttpAdapter#debug}.\n * @param {boolean} [opts.forceTrailingSlash=false] See {@link HttpAdapter#forceTrailingSlash}.\n * @param {object} [opts.http=axios] See {@link HttpAdapter#http}.\n * @param {object} [opts.httpConfig={}] See {@link HttpAdapter#httpConfig}.\n * @param {string} [opts.suffix=''] See {@link HttpAdapter#suffix}.\n * @param {boolean} [opts.useFetch=false] See {@link HttpAdapter#useFetch}.\n * @see http://www.js-data.io/docs/js-data-http\n */\nexport function HttpAdapter (opts) {\n utils.classCallCheck(this, HttpAdapter)\n\n opts || (opts = {})\n // Fill in any missing options with the defaults\n utils.fillIn(opts, DEFAULTS)\n Adapter.call(this, opts)\n}\n\n/**\n * @name module:js-data-http.HttpAdapter\n * @see HttpAdapter\n */\n\nAdapter.extend({\n constructor: HttpAdapter,\n\n /**\n * @name HttpAdapter#afterDEL\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterDEL: noop2,\n\n /**\n * @name HttpAdapter#afterGET\n * @method\n * @param {string} url\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterGET: noop2,\n\n /**\n * @name HttpAdapter#afterHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterHTTP: noop2,\n\n /**\n * @name HttpAdapter#afterPOST\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPOST: noop2,\n\n /**\n * @name HttpAdapter#afterPUT\n * @method\n * @param {string} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n * @param {object} response\n */\n afterPUT: noop2,\n\n /**\n * @name HttpAdapter#beforeDEL\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeDEL: noop,\n\n /**\n * @name HttpAdapter#beforeGET\n * @method\n * @param {object} url\n * @param {object} config\n * @param {object} opts\n */\n beforeGET: noop,\n\n /**\n * @name HttpAdapter#beforeHTTP\n * @method\n * @param {object} config\n * @param {object} opts\n */\n beforeHTTP: noop,\n\n /**\n * @name HttpAdapter#beforePOST\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePOST: noop,\n\n /**\n * @name HttpAdapter#beforePUT\n * @method\n * @param {object} url\n * @param {object} data\n * @param {object} config\n * @param {object} opts\n */\n beforePUT: noop,\n\n _count (mapper, query, opts) {\n return this.GET(\n this.getPath('count', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _create (mapper, props, opts) {\n return this.POST(\n this.getPath('create', mapper, props, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _createMany (mapper, props, opts) {\n return this.POST(\n this.getPath('createMany', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroy (mapper, id, opts) {\n return this.DEL(\n this.getPath('destroy', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _destroyAll (mapper, query, opts) {\n return this.DEL(\n this.getPath('destroyAll', mapper, null, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _end (mapper, opts, response) {\n return [this.deserialize(mapper, response, opts), response]\n },\n\n _find (mapper, id, opts) {\n return this.GET(\n this.getPath('find', mapper, id, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _findAll (mapper, query, opts) {\n return this.GET(\n this.getPath('findAll', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _sum (mapper, field, query, opts) {\n return this.GET(\n this.getPath('sum', mapper, opts.params, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _update (mapper, id, props, opts) {\n return this.PUT(\n this.getPath('update', mapper, id, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateAll (mapper, props, query, opts) {\n return this.PUT(\n this.getPath('updateAll', mapper, null, opts),\n this.serialize(mapper, props, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n _updateMany (mapper, records, opts) {\n return this.PUT(\n this.getPath('updateMany', mapper, null, opts),\n this.serialize(mapper, records, opts),\n opts\n ).then((response) => this._end(mapper, opts, response))\n },\n\n /**\n * Retrieve the number of records that match the selection `query`.\n *\n * @name HttpAdapter#count\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n count (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params.count = true\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.count.call(this, mapper, query, opts)\n },\n\n /**\n * Create a new the record from the provided `props`.\n *\n * @name HttpAdapter#create\n * @method\n * @param {object} mapper The mapper.\n * @param {object} props Properties to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n create (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.create.call(this, mapper, props, opts)\n },\n\n /**\n * Create multiple new records in batch.\n *\n * @name HttpAdapter#createMany\n * @method\n * @param {object} mapper The mapper.\n * @param {array} props Array of property objects to send as the payload.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n createMany (mapper, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.createMany.call(this, mapper, props, opts)\n },\n\n /**\n * Make an Http request to `url` according to the configuration in `config`.\n *\n * @name HttpAdapter#DEL\n * @method\n * @param {string} url Url for the request.\n * @param {object} [config] Http configuration that will be passed to\n * {@link HttpAdapter#HTTP}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n DEL (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'delete'\n\n // beforeDEL lifecycle hook\n op = opts.op = 'beforeDEL'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'DEL'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterDEL lifecycle hook\n op = opts.op = 'afterDEL'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the server response object into the payload that will be returned\n * to JSData.\n *\n * @name HttpAdapter#deserialize\n * @method\n * @param {object} mapper The mapper used for the operation.\n * @param {object} response Response object from {@link HttpAdapter#HTTP}.\n * @param {object} opts Configuration options.\n * @return {(object|array)} Deserialized data.\n */\n deserialize (mapper, response, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (utils.isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (response && response.hasOwnProperty('data')) {\n return response.data\n }\n return response\n },\n\n /**\n * Destroy the record with the given primary key.\n *\n * @name HttpAdapter#destroy\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to destroy.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroy (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroy.call(this, mapper, id, opts)\n },\n\n /**\n * Destroy the records that match the selection `query`.\n *\n * @name HttpAdapter#destroyAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n destroyAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.destroyAll.call(this, mapper, query, opts)\n },\n\n /**\n * Log an error.\n *\n * @name HttpAdapter#error\n * @method\n * @param {...*} [args] Arguments to log.\n */\n error (...args) {\n if (console) {\n console[typeof console.error === 'function' ? 'error' : 'log'](...args)\n }\n },\n\n /**\n * Make an Http request using `window.fetch`.\n *\n * @name HttpAdapter#fetch\n * @method\n * @param {object} config Request configuration.\n * @param {object} config.data Payload for the request.\n * @param {string} config.method Http method for the request.\n * @param {object} config.headers Headers for the request.\n * @param {object} config.params Querystring for the request.\n * @param {string} config.url Url for the request.\n */\n fetch (config) {\n const requestConfig = {\n method: config.method,\n // turn the plain headers object into the Fetch Headers object\n headers: new Headers(config.headers || {})\n }\n\n if (config.data) {\n requestConfig.body = utils.toJson(config.data)\n }\n\n return fetch(buildUrl(config.url, config.params), requestConfig)\n .then((response) => {\n response.config = {\n method: config.method,\n url: config.url\n }\n return response.json()\n .then((data) => {\n response.data = data\n return response\n })\n })\n },\n\n /**\n * Retrieve the record with the given primary key.\n *\n * @name HttpAdapter#find\n * @method\n * @param {object} mapper The mapper.\n * @param {(string|number)} id Primary key of the record to retrieve.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n find (mapper, id, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.find.call(this, mapper, id, opts)\n },\n\n /**\n * Retrieve the records that match the selection `query`.\n *\n * @name HttpAdapter#findAll\n * @method\n * @param {object} mapper The mapper.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n findAll (mapper, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.findAll.call(this, mapper, query, opts)\n },\n\n /**\n * Make a GET request.\n *\n * @name HttpAdapter#GET\n * @method\n * @param {string} url The url for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n GET (url, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.method = config.method || 'get'\n\n // beforeGET lifecycle hook\n op = opts.op = 'beforeGET'\n return utils.resolve(this[op](url, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'GET'\n this.dbg(op, url, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterGET lifecycle hook\n op = opts.op = 'afterGET'\n return utils.resolve(this[op](url, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * @name HttpAdapter#getEndpoint\n * @method\n * @param {object} mapper The Mapper.\n * @param {*} id The primary key, if any.\n * @param {boolean} opts Configuration options.\n * @return {string} Full path.\n */\n getEndpoint (mapper, id, opts) {\n opts || (opts = {})\n opts.params = utils.isUndefined(opts.params) ? {} : opts.params\n const relationList = mapper.relationList || []\n let endpoint = utils.isUndefined(opts.endpoint) ? (utils.isUndefined(mapper.endpoint) ? mapper.name : mapper.endpoint) : opts.endpoint\n\n relationList.forEach((def) => {\n if (def.type !== 'belongsTo' || !def.parent) {\n return\n }\n let item\n const parentKey = def.foreignKey\n const parentDef = def.getRelation()\n let parentId = opts.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete opts.params[parentKey]\n }\n return false\n } else {\n delete opts.params[parentKey]\n\n if (utils.isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || def.getForeignKey(item) || (def.getLocalField(item) ? utils.get(def.getLocalField(item), parentDef.idAttribute) : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n utils.forOwn(opts, (value, key) => {\n _opts[key] = value\n })\n utils._(_opts, parentDef)\n endpoint = makePath(this.getEndpoint(parentDef, parentId, _opts), parentId, endpoint)\n return false\n }\n }\n })\n\n return endpoint\n },\n\n /**\n * @name HttpAdapter#getPath\n * @method\n * @param {string} method The method being executed.\n * @param {object} mapper The Mapper.\n * @param {(string|number)?} id The primary key, if any.\n * @param {object} opts Configuration options.\n */\n getPath (method, mapper, id, opts) {\n opts || (opts = {})\n const args = [\n opts.basePath === undefined ? (mapper.basePath === undefined ? this.basePath : mapper.basePath) : opts.basePath,\n this.getEndpoint(mapper, (utils.isString(id) || utils.isNumber(id) || method === 'create') ? id : null, opts)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(utils, args)\n },\n\n getParams (opts) {\n opts || (opts = {})\n if (opts.params === undefined) {\n return {}\n }\n return utils.copy(opts.params)\n },\n\n getSuffix (mapper, opts) {\n opts || (opts = {})\n if (opts.suffix === undefined) {\n if (mapper.suffix === undefined) {\n return this.suffix\n }\n return mapper.suffix\n }\n return opts.suffix\n },\n\n /**\n * Make an Http request.\n *\n * @name HttpAdapter#HTTP\n * @method\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n HTTP (config, opts) {\n const start = new Date()\n opts || (opts = {})\n const payload = config.data\n const cache = config.cache\n const timeout = config.timeout\n config = utils.copy(config, null, null, null, ['data', 'cache', 'timeout'])\n config = utils.deepMixIn(config, this.httpConfig)\n config.data = payload\n config.cache = cache\n if (timeout !== undefined) {\n config.timeout = timeout\n }\n if (this.forceTrailingSlash && config.url[config.url.length - 1] !== '/') {\n config.url += '/'\n }\n config.method = config.method.toUpperCase()\n const suffix = config.suffix || opts.suffix || this.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) {\n config.url += suffix\n }\n\n const logResponse = (data) => {\n const str = `${start.toUTCString()} - ${config.method.toUpperCase()} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n if (data.status >= 200 && data.status < 300) {\n if (this.log) {\n this.dbg(str, data)\n }\n return data\n } else {\n if (this.error) {\n this.error(`'FAILED: ${str}`, data)\n }\n return utils.reject(data)\n }\n }\n\n if (!this.http) {\n if ((this.useFetch || opts.useFetch)) {\n if (!hasFetch) {\n throw new Error('Attempting to use window.fetch, but it is not available!')\n }\n } else {\n throw new Error('You have not configured this adapter with an http library!')\n }\n }\n\n return utils.resolve(this.beforeHTTP(config, opts))\n .then((_config) => {\n config = _config || config\n if (hasFetch && (this.useFetch || opts.useFetch || !this.http)) {\n return this.fetch(config, opts).then(logResponse, logResponse)\n }\n const httpConfig = utils.plainCopy(config)\n delete httpConfig.adapter\n return this.http(httpConfig).then(logResponse, logResponse)\n .catch((err) => this.responseError(err, config, opts))\n })\n .then((response) => {\n return utils.resolve(this.afterHTTP(config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a POST request.\n *\n * @name HttpAdapter#POST\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n POST (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'post'\n\n // beforePOST lifecycle hook\n op = opts.op = 'beforePOST'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'POST'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPOST lifecycle hook\n op = opts.op = 'afterPOST'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Make a PUT request.\n *\n * @name HttpAdapter#PUT\n * @method\n * @param {*} url The url for the request.\n * @param {object} data Payload for the request.\n * @param {object} config Request configuration options.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n PUT (url, data, config, opts) {\n let op\n config || (config = {})\n opts || (opts = {})\n config.url = url || config.url\n config.data = data || config.data\n config.method = config.method || 'put'\n\n // beforePUT lifecycle hook\n op = opts.op = 'beforePUT'\n return utils.resolve(this[op](url, data, config, opts))\n .then((_config) => {\n // Allow re-assignment from lifecycle hook\n config = _config === undefined ? config : _config\n op = opts.op = 'PUT'\n this.dbg(op, url, data, config, opts)\n return this.HTTP(config, opts)\n })\n .then((response) => {\n // afterPUT lifecycle hook\n op = opts.op = 'afterPUT'\n return utils.resolve(this[op](url, data, config, opts, response))\n .then((_response) => _response === undefined ? response : _response)\n })\n },\n\n /**\n * Transform the querystring object before it is serialized. This doesn't do\n * anything by default.\n *\n * @name HttpAdapter#queryTransform\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {*} params The querystring object.\n * @param {*} opts Configuration options\n * @return {*} Transformed params.\n */\n queryTransform (mapper, params, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (utils.isFunction(mapper.queryTransform)) {\n return mapper.queryTransform(mapper, params, opts)\n }\n return params\n },\n\n /**\n * Error handler invoked when the promise returned by {@link HttpAdapter#http}\n * is rejected. Default implementation is to just return the error wrapped in\n * a rejected Promise, aka rethrow the error. {@link HttpAdapter#http} is\n * called by {@link HttpAdapter#HTTP}.\n *\n * @name HttpAdapter#responseError\n * @method\n * @param {*} err The error that {@link HttpAdapter#http} rejected with.\n * @param {object} config The `config` argument that was passed to {@link HttpAdapter#HTTP}.\n * @param {*} opts The `opts` argument that was passed to {@link HttpAdapter#HTTP}.\n * @return {Promise}\n */\n responseError (err, config, opts) {\n return utils.reject(err)\n },\n\n /**\n * Serialize request data. This doesn't do anything by default.\n *\n * @name HttpAdapter#serialize\n * @method\n * @param {object} mapper The Mapper that triggered the request.\n * @param {object} data The request payload.\n * @param {*} opts Configuration options.\n * @return {*} Serialized data.\n */\n serialize (mapper, data, opts) {\n opts || (opts = {})\n if (utils.isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (utils.isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\n },\n\n /**\n * Retrieve the sum of the field of the records that match the selection query.\n *\n * @name HttpAdapter#sum\n * @method\n * @param {object} mapper The mapper.\n * @param {string} field The field to sum.\n * @param {object} query Selection query.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n sum (mapper, field, query, opts) {\n query || (query = {})\n opts || (opts = {})\n if (!utils.isString(field)) {\n throw new Error('field must be a string!')\n }\n opts.params = this.getParams(opts)\n opts.params.sum = field\n opts.suffix = this.getSuffix(mapper, opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n return Adapter.prototype.sum.call(this, mapper, field, query, opts)\n },\n\n /**\n * Perform an update. Makes a PUT request by default.\n *\n * @name HttpAdapter#update\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {*} id The primary key of the record being updated.\n * @param {*} props The update payload.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n update (mapper, id, props, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.update.call(this, mapper, id, props, opts)\n },\n\n /**\n * Perform an update against records that match the selection query. Makes a\n * PUT request by default.\n *\n * @name HttpAdapter#updateAll\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {object} props The update payload.\n * @param {object} query The selection query. See {@link http://www.js-data.io/docs/query-syntax}.\n * @param {object} [opts] Configuration options.\n * @return {Promise}\n */\n updateAll (mapper, props, query, opts) {\n query || (query = {})\n opts || (opts = {})\n opts.params = this.getParams(opts)\n utils.deepMixIn(opts.params, query)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateAll.call(this, mapper, props, query, opts)\n },\n\n /**\n * Update multiple individual records in a batch.\n *\n * @name HttpAdapter#updateMany\n * @method\n * @param {object} mapper The Mapper for the request.\n * @param {array} records Array of property objects to send as the payload.\n * Each must contain the primary key of the record to be updated.\n * @param {object} [opts] Configuration options.\n * @param {string} [opts.params] Querystring parameters.\n * @param {string} [opts.suffix={@link HttpAdapter#suffix}] See {@link HttpAdapter#suffix}.\n * @return {Promise}\n */\n updateMany (mapper, records, opts) {\n opts || (opts = {})\n opts.params = this.getParams(opts)\n opts.params = this.queryTransform(mapper, opts.params, opts)\n opts.suffix = this.getSuffix(mapper, opts)\n return Adapter.prototype.updateMany.call(this, mapper, records, opts)\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addAction = JSDataHttp.addAction;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * // GET /reports/schools/:school_id/teachers\n * addAction('getTeacherReports', {\n * endpoint: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addAction\n * @method\n * @param {string} name Name of the new action.\n * @param {object} [opts] Action configuration\n * @param {string} [opts.adapter=\"http\"] The name of the adapter to use.\n * @param {string} [opts.pathname] Set the action's pathname.\n * @param {function} [opts.request] Specify a request handler to be executed\n * before the request is made.\n * @param {function} [opts.response] Specify a response handler to be executed\n * after the response is received.\n * @param {function} [opts.responseError] Specify an error handler to be\n * executed on error.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addAction (name, opts) {\n if (!name || !utils.isString(name)) {\n throw new TypeError('action(name[, opts]): Expected: string, Found: ' + typeof name)\n }\n return function (mapper) {\n if (mapper[name]) {\n throw new Error('action(name[, opts]): ' + name + ' already exists on target!')\n }\n opts.request = opts.request || function (config) { return config }\n opts.response = opts.response || function (response) { return response }\n opts.responseError = opts.responseError || function (err) { return utils.reject(err) }\n mapper[name] = function (id, _opts) {\n _opts = _opts || {}\n if (utils.isObject(id)) {\n _opts = id\n }\n utils.fillIn(_opts, opts)\n let adapter = this.getAdapter(_opts.adapter || this.defaultAdapter || 'http')\n const config = {}\n config.mapper = this.name\n utils.deepMixIn(config, _opts)\n config.method = config.method || 'GET'\n if (typeof _opts.getEndpoint === 'function') {\n config.url = _opts.getEndpoint(this, _opts)\n } else {\n let args = [\n _opts.basePath || this.basePath || adapter.basePath,\n adapter.getEndpoint(this, id, _opts)\n ]\n if (utils.isSorN(id)) {\n args.push(id)\n }\n args.push(opts.pathname || name)\n config.url = makePath.apply(null, args)\n }\n return utils.resolve(config)\n .then(_opts.request)\n .then((config) => adapter.HTTP(config))\n .then((data) => {\n if (data && data.config) {\n data.config.mapper = this.name\n }\n return data\n })\n .then(_opts.response, _opts.responseError)\n }\n return mapper\n }\n}\n\n/**\n * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for\n * action configuration options.\n *\n * @example\n * // CommonJS\n * var JSData = require('js-data');\n * // It is recommended to use DataStore in the browser\n * var DataStore = JSData.DataStore;\n *\n * var JSDataHttp = require('js-data-http');\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var addActions = JSDataHttp.addActions;\n *\n * var httpAdapter = new HttpAdapter();\n * var store = new DataStore();\n *\n * store.registerAdapter('http', httpAdapter, { 'default': true });\n * store.defineMapper('school');\n *\n * addActions({\n * // GET /reports/schools/:school_id/teachers\n * getTeacherReports: {\n * basePath: 'reports/schools',\n * pathname: 'teachers',\n * method: 'GET'\n * }\n * })(store.getMapper('school'));\n *\n * // /reports/schools/1234/teachers\n * store.getMapper('school').getTeacherReports(1234).then((response) => {\n * // ...\n * });\n *\n * @name module:js-data-http.addActions\n * @method\n * @param {object.} opts Object where the key is an action name\n * and the value is the configuration for the action.\n * @return {function} Decoration function, which should be passed the mapper to\n * decorate when invoked.\n */\nexport function addActions (opts) {\n opts || (opts = {})\n return function (mapper) {\n utils.forOwn(opts, function (value, key) {\n addAction(key, value)(mapper)\n })\n return mapper\n }\n}\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name module:js-data-http.version\n * @type {object}\n * @property {string} version.full The full semver value.\n * @property {number} version.major The major version number.\n * @property {number} version.minor The minor version number.\n * @property {number} version.patch The patch version number.\n * @property {(string|boolean)} version.alpha The alpha version value,\n * otherwise `false` if the current version is not alpha.\n * @property {(string|boolean)} version.beta The beta version value,\n * otherwise `false` if the current version is not beta.\n */\nexport const version = '<%= version %>'\n\n/**\n * Registered as `js-data-http` in NPM and Bower. The build of `js-data-http`\n * that works on Node.js is registered in NPM as `js-data-http-node`. The build\n * of `js-data-http` that does not bundle `axios` is registered in NPM and Bower\n * as `js-data-fetch`.\n *\n * @example Script tag\n * var HttpAdapter = window.JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example CommonJS\n * var HttpAdapter = require('js-data-Http').HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * @example ES2015 Modules\n * import { HttpAdapter } from 'js-data-Http';\n * const httpAdapter = new HttpAdapter();\n *\n * @example AMD\n * define('myApp', ['js-data-Http'], function (JSDataHttp) {\n * var HttpAdapter = JSDataHttp.HttpAdapter;\n * var httpAdapter = new HttpAdapter();\n *\n * // ...\n * });\n *\n * @module js-data-http\n */\n\n/**\n * Create a subclass of this HttpAdapter:\n * @example HttpAdapter.extend\n * // Normally you would do: import { HttpAdapter } from 'js-data-http';\n * // or: import { HttpAdapter } from 'js-data-http-node';\n * const JSDataHttp = require('js-data-http-node');\n * const { HttpAdapter } = JSDataHttp;\n * console.log('Using JSDataHttp v' + JSDataHttp.version.full);\n *\n * // Extend the class using ES2015 class syntax.\n * class CustomHttpAdapterClass extends HttpAdapter {\n * foo () { return 'bar'; }\n * static beep () { return 'boop'; }\n * }\n * const customHttpAdapter = new CustomHttpAdapterClass();\n * console.log(customHttpAdapter.foo());\n * console.log(CustomHttpAdapterClass.beep());\n *\n * // Extend the class using alternate method.\n * const OtherHttpAdapterClass = HttpAdapter.extend({\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const otherHttpAdapter = new OtherHttpAdapterClass();\n * console.log(otherHttpAdapter.foo());\n * console.log(OtherHttpAdapterClass.beep());\n *\n * // Extend the class, providing a custom constructor.\n * function AnotherHttpAdapterClass () {\n * HttpAdapter.call(this);\n * this.created_at = new Date().getTime();\n * }\n * HttpAdapter.extend({\n * constructor: AnotherHttpAdapterClass,\n * foo () { return 'bar'; }\n * }, {\n * beep () { return 'boop'; }\n * })\n * const anotherHttpAdapter = new AnotherHttpAdapterClass();\n * console.log(anotherHttpAdapter.created_at);\n * console.log(anotherHttpAdapter.foo());\n * console.log(AnotherHttpAdapterClass.beep());\n *\n * @method HttpAdapter.extend\n * @param {object} [props={}] Properties to add to the prototype of the\n * subclass.\n * @param {object} [props.constructor] Provide a custom constructor function\n * to be used as the subclass itself.\n * @param {object} [classProps={}] Static properties to add to the subclass.\n * @returns {Constructor} Subclass of this HttpAdapter class.\n * @since 3.0.0\n */\n"],"names":["hasFetch","window","fetch","e","isValidString","value","join","items","separator","filter","makePath","args","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","key","utils","isArray","forEach","v","toString","call","toISOString","isObject","toJson","push","length","indexOf","DEFAULTS","axios","HttpAdapter","opts","classCallCheck","fillIn","Adapter","extend","noop2","noop","mapper","query","GET","getPath","then","response","_end","props","POST","serialize","id","DEL","deserialize","field","PUT","records","getParams","count","suffix","getSuffix","deepMixIn","queryTransform","prototype","create","createMany","config","op","method","resolve","_config","undefined","dbg","HTTP","_response","isFunction","hasOwnProperty","data","destroy","destroyAll","console","error","requestConfig","Headers","headers","body","json","find","findAll","isUndefined","relationList","endpoint","name","def","type","parent","item","parentKey","foreignKey","parentDef","getRelation","parentId","getForeignKey","getLocalField","get","idAttribute","_opts","_","getEndpoint","basePath","isString","isNumber","apply","copy","start","Date","payload","cache","timeout","httpConfig","forceTrailingSlash","toUpperCase","substr","logResponse","str","toUTCString","status","getTime","log","reject","http","useFetch","Error","beforeHTTP","plainCopy","adapter","catch","err","responseError","afterHTTP","sum","update","updateAll","updateMany","addAction","TypeError","request","getAdapter","defaultAdapter","isSorN","pathname","addActions","version"],"mappings":"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"} \ No newline at end of file