diff --git a/.gitignore b/.gitignore index 815fef0..8b9948d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ bower_components/ *.iml coverage/ -junit/ \ No newline at end of file +junit/ +doc/ +node_modules/ \ No newline at end of file diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 3fa2106..a5c9494 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -5,7 +5,7 @@ # Names should be added to this file as: # [commit count] Name 1 InternalFX - 53 Jason Dobry + 66 Jason Dobry 1 Josh Drake 1 RobertHerhold 3 Tomás Fox diff --git a/README.md b/README.md index 25ce7c5..358c764 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,24 @@ [![Coverage Status][cov_b]][cov_l] [![Codacy][cod_b]][cod_l] -HTTP adapter for [js-data](http://www.js-data.io/). +This repo contains HTTP adapters for [js-data](http://www.js-data.io/): + +- js-data-http - HTTP (XHR, includes [axios][axios]) adapter for js-data in the +browser. Capable of using `window.fetch` instead of axios. +- js-data-fetch - Same as js-data-http but doesn't include axios and will use +`window.fetch` if available and if you don't provide your own http library. +- js-data-http-node - Same as js-data-http but runs on Node.js. Depends on axios +and will use axios unless you provide a different http library. + +Tested on IE9, Chrome 46, Firefox 41 & Safari 7.1 using +bs logo To get started, visit __[http://js-data.io](http://www.js-data.io)__. ## Table of contents * [Quick start](#quick-start) +* [Dependencies](#dependencies) * [Guides and Tutorials](#guides-and-tutorials) * [API Reference Docs](#api-reference-docs) * [Community](#community) @@ -48,6 +59,13 @@ container.find('school', 1).then(function (school) { }) ``` +## Dependencies + +`js-data-http` bundles axios and depends on `js-data`. `js-data-fetch` depends +on `js-data`. `js-data-http-node` depends on `js-data` and optionally axios. + +See [JSData's dependencies](https://github.com/js-data/js-data/blob/master/README.md#dependencies). + ## Guides and Tutorials [Get started at http://js-data.io](http://js-data.io) diff --git a/bower.json b/bower.json index d6ec02a..e5a1550 100644 --- a/bower.json +++ b/bower.json @@ -1,16 +1,12 @@ { "name": "js-data-http", - "description": "HTTP adapter for js-data.", - "homepage": "http://www.js-data.io/docs/dshttpadapter", + "description": "HTTP (XHR) adapter for js-data in the browser.", + "homepage": "https://github.com/js-data/js-data-http", "repository": { "type": "git", "url": "https://github.com/js-data/js-data-http.git" }, - "author": { - "name": "Jason Dobry", - "url": "http://www.pseudobry.com", - "email": "jason.dobry@gmail.com" - }, + "author": "js-data-http project authors", "main": "./dist/js-data-http.js", "ignore": [ ".idea/", @@ -31,6 +27,6 @@ "karma.start.js" ], "dependencies": { - "js-data": ">=3.0.0-alpha.8" + "js-data": ">=3.0.0-alpha.15" } } diff --git a/dist/js-data-http.js b/dist/js-data-http.js index 4b9225c..210fbbe 100644 --- a/dist/js-data-http.js +++ b/dist/js-data-http.js @@ -1,8 +1,8 @@ /*! * js-data-http -* @version 2.2.0 - Homepage +* @version 3.0.0-alpha.5 - Homepage * @author Jason Dobry -* @copyright (c) 2014-2016 Jason Dobry +* @copyright (c) 2014-2015 Jason Dobry * @license MIT * * @overview HTTP adapter for js-data. @@ -67,34 +67,106 @@ return /******/ (function(modules) { // webpackBootstrap 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + var _jsData = __webpack_require__(1); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var JSData = __webpack_require__(1); - var axios = null; + /* global fetch:true Headers:true Request:true */ + var axios = __webpack_require__(2); + var _ = _jsData.utils._; + var addHiddenPropsToTarget = _jsData.utils.addHiddenPropsToTarget; + var copy = _jsData.utils.copy; + var deepMixIn = _jsData.utils.deepMixIn; + var extend = _jsData.utils.extend; + var fillIn = _jsData.utils.fillIn; + var forOwn = _jsData.utils.forOwn; + var isArray = _jsData.utils.isArray; + var isFunction = _jsData.utils.isFunction; + var isNumber = _jsData.utils.isNumber; + var isObject = _jsData.utils.isObject; + var isSorN = _jsData.utils.isSorN; + var isString = _jsData.utils.isString; + var isUndefined = _jsData.utils.isUndefined; + var resolve = _jsData.utils.resolve; + var reject = _jsData.utils.reject; + var toJson = _jsData.utils.toJson; + + + var hasFetch = false; try { - axios = __webpack_require__(2); + hasFetch = window && window.fetch; } catch (e) {} - var DSUtils = JSData.DSUtils; - var deepMixIn = DSUtils.deepMixIn; - var removeCircular = DSUtils.removeCircular; - var copy = DSUtils.copy; - var makePath = DSUtils.makePath; - var isString = DSUtils.isString; - var isNumber = DSUtils.isNumber; - - var Defaults = function () { - function Defaults() { - _classCallCheck(this, Defaults); + 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]; } - // Default values for arguments - opts || (opts = {}); + 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 = []; + + forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + if (!isArray(val)) { + val = [val]; + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString(); + } else if (isObject(v)) { + v = toJson(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&'); + } + + return url; + } + + var noop = function noop() { + 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 - 1]; + self.dbg.apply(self, [opts.op].concat(args)); + }; + + var noop2 = function noop2() { + var self = this; + + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } var opts = args[args.length - 2]; self.dbg.apply(self, [opts.op].concat(args)); @@ -598,22 +670,100 @@ return /******/ (function(modules) { // webpackBootstrap if (opts.raw) { return response; } - }, { - key: 'log', - value: function log() {} - }, { - key: 'error', - value: function error() {} - }]); + return response ? 'data' in response ? response.data : response : 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; + var op = undefined; + opts = opts ? copy(opts) : {}; + opts.params || (opts.params = {}); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix; + + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy'; + return resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy'; + self.dbg(op, mapper, id, opts); + return self.DEL(self.getPath('destroy', mapper, id, opts), opts); + }).then(function (response) { + return self.deserialize(mapper, response, opts); + }).then(function (data) { + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy'; + return resolve(self[op](mapper, id, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data; + }); + }); + }, - return Defaults; - }(); - var defaultsPrototype = Defaults.prototype; + /** + * 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; + var op = undefined; + query || (query = {}); + opts = opts ? copy(opts) : {}; + opts.params || (opts.params = {}); + deepMixIn(opts.params, query); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix; + + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll'; + return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll'; + self.dbg(op, mapper, query, opts); + return self.DEL(self.getPath('destroyAll', mapper, null, opts), opts); + }).then(function (response) { + return self.deserialize(mapper, response, opts); + }).then(function (data) { + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll'; + return resolve(self[op](mapper, query, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data; + }); + }); + }, - defaultsPrototype.basePath = ''; - defaultsPrototype.forceTrailingSlash = ''; + /** + * 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); } @@ -638,11 +788,17 @@ return /******/ (function(modules) { // webpackBootstrap return _fetch.apply(this, arguments); } - defaultsPrototype.verbsUseBasePath = false; + fetch.toString = function () { + return _fetch.toString(); + }; - var DSHttpAdapter = function () { - function DSHttpAdapter(options) { - _classCallCheck(this, DSHttpAdapter); + 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 = toJson(config.data); @@ -787,146 +943,112 @@ return /******/ (function(modules) { // webpackBootstrap * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var _this = this; - + var self = this; opts || (opts = {}); opts.params || (opts.params = {}); - var item = undefined; - var parentKey = mapper.parentKey; var endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint; - var parentField = mapper.parentField; - var parentDef = mapper.parent ? mapper.getResource(mapper.parent) : undefined; - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { + var parents = mapper.parents || (mapper.parent ? _defineProperty({}, mapper.parent, { + key: mapper.parentKey, + field: mapper.parentField + }) : {}); + + forOwn(parents, function (parent, parentName) { + var item = undefined; + var parentKey = parent.key; + var parentField = parent.field; + var parentDef = mapper.getResource(parentName); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { delete opts.params[parentKey]; - } - return endpoint; - } else { - delete opts.params[parentKey]; - - _createClass(DSHttpAdapter, [{ - key: 'getEndpoint', - value: function getEndpoint(resourceConfig, id, options) { - options = options || {}; - options.params = options.params || {}; - - var endpoint = options.hasOwnProperty('endpoint') ? options.endpoint : resourceConfig.endpoint; - var parents = resourceConfig.parents || (resourceConfig.parent ? _defineProperty({}, resourceConfig.parent, { - key: resourceConfig.parentKey, - field: resourceConfig.parentField - }) : {}); - - DSUtils.forOwn(parents, function (parent, parentName) { - var _this2 = this; - - var item = undefined; - var parentKey = parent.key; - var parentField = parent.field; - var parentDef = resourceConfig.getResource(parentName); - var parentId = options.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { - delete options.params[parentKey]; - } - } else { - delete options.params[parentKey]; - - if (DSUtils._sn(id)) { - item = resourceConfig.get(id); - } else if (DSUtils._o(id)) { - item = id; - } - console.log('item', item); - if (item) { - parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); - } + if (isString(id) || isNumber(id)) { + item = mapper.get(id); + } else if (isObject(id)) { + item = id; + } - if (parentId) { - (function () { - delete options.endpoint; - var _options = {}; - DSUtils.forOwn(options, function (value, key) { - _options[key] = value; - }); - endpoint = DSUtils.makePath(_this2.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint); - })(); - } + if (item) { + parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); } - }, this); - return endpoint; - } - }, { - key: 'getPath', - value: function getPath(method, resourceConfig, id, options) { - var _this = this; - options = options || {}; - if (isString(options.urlPath)) { - return makePath.apply(DSUtils, [options.basePath || _this.defaults.basePath || resourceConfig.basePath, options.urlPath]); - } else { - var args = [options.basePath || _this.defaults.basePath || resourceConfig.basePath, this.getEndpoint(resourceConfig, isString(id) || isNumber(id) || method === 'create' ? id : null, options)]; - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id); + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _(_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 makePath.apply(DSUtils, args); } + }); + + 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 = [opts.basePath === undefined ? mapper.basePath === undefined ? self.basePath : mapper.basePath : opts.basePath, self.getEndpoint(mapper, isString(id) || isNumber(id) || method === 'create' ? id : null, opts)]; + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id); } - }, { - key: 'HTTP', - value: function HTTP(config) { - var _this = this; - var start = new Date(); - config = copy(config); - config = deepMixIn(config, _this.defaults.httpConfig); - if (!('verbsUseBasePath' in config)) { - config.verbsUseBasePath = _this.defaults.verbsUseBasePath; - } - if (!config.urlOverride && config.verbsUseBasePath) { - config.url = makePath(config.basePath || _this.defaults.basePath, config.url); - } - if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/' && !config.urlOverride) { - config.url += '/'; - } - // if (typeof config.data === 'object') { - // config.data = removeCircular(config.data) - // } - config.method = config.method.toUpperCase(); - var suffix = config.suffix || _this.defaults.suffix; - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix && !config.urlOverride) { - config.url += suffix; - } + return makePath.apply(_jsData.utils, args); + }, - // logs the HTTP response - function logResponse(data, isRejection) { - data = data || {}; - // examine the data object - if (data instanceof Error) { - // log the Error object - _this.defaults.error('FAILED: ' + (data.message || 'Unknown Error'), data); - return DSUtils.Promise.reject(data); - } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') { - var str = start.toUTCString() + ' - ' + config.method + ' ' + config.url + ' - ' + data.status + ' ' + (new Date().getTime() - start.getTime()) + 'ms'; - - if (data.status >= 200 && data.status < 300 && !isRejection) { - if (_this.defaults.log) { - _this.defaults.log(str, data); - } - return data; - } else { - if (_this.defaults.error) { - _this.defaults.error('FAILED: ' + str, data); - } - return DSUtils.Promise.reject(data); - } - } else { - // unknown type for 'data' that is not an Object or Error - _this.defaults.error('FAILED', data); - return DSUtils.Promise.reject(data); + + /** + * 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 = {}); + config = copy(config); + config = deepMixIn(config, self.httpConfig); + 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 { @@ -935,52 +1057,39 @@ return /******/ (function(modules) { // webpackBootstrap } return reject(data); } + } - if (!this.http) { - throw new Error('You have not configured this adapter with an http library!'); - } + if (!self.http) { + throw new Error('You have not configured this adapter with an http library!'); + } - return this.http(config).then(logResponse, function (data) { - return logResponse(data, true); + return 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); }); - } - }, { - key: 'GET', - value: function GET(url, config) { - config = config || {}; - config.method = config.method || 'get'; - config.urlOverride = !!config.url; - config.url = config.url || url; - return this.HTTP(config); - } - }, { - key: 'POST', - value: function POST(url, attrs, config) { - config = config || {}; - config.method = config.method || 'post'; - config.urlOverride = !!config.url; - config.url = config.url || url; - config.data = config.data || attrs; - return this.HTTP(config); - } - }, { - key: 'PUT', - value: function PUT(url, attrs, config) { - config = config || {}; - config.method = config.method || 'put'; - config.urlOverride = !!config.url; - config.url = config.url || url; - config.data = config.data || attrs; - return this.HTTP(config); - } - }, { - key: 'DEL', - value: function DEL(url, config) { - config = config || {}; - config.method = config.method || 'delete'; - config.urlOverride = !!config.url; - config.url = config.url || url; - return this.HTTP(config); + }).then(function (response) { + return resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response; + }); + }); + }, + + + /** + * Log the provided arguments at the specified leve. + * + * @name HttpAdapter#log + * @method + * @param {string} level Log level. + * @param {...*} [args] Arguments to log. + */ + log: function log(level) { + for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { + args[_key5 - 1] = arguments[_key5]; } if (level && !args.length) { @@ -1217,11 +1326,144 @@ return /******/ (function(modules) { // webpackBootstrap // Allow re-assignment from lifecycle hook return isUndefined(_data) ? data : _data; }); + }); + }, + + + /** + * 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; + var op = undefined; + opts = opts ? copy(opts) : {}; + opts.params || (opts.params = {}); + opts.params = self.queryTransform(mapper, opts.params, opts); + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix; + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany'; + return resolve(self[op](mapper, records, opts)).then(function () { + op = opts.op = 'updateMany'; + self.dbg(op, mapper, records, opts); + return self.PUT(self.getPath('updateMany', mapper, null, opts), self.serialize(mapper, records, opts), opts); + }).then(function (response) { + return self.deserialize(mapper, response, opts); + }).then(function (data) { + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany'; + return resolve(self[op](mapper, records, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data; + }); + }); + } + }); + + /** + * Add an Http actions to a mapper. + * + * @name HttpAdapter.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. + */ + HttpAdapter.addAction = function (name, opts) { + if (!name || !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 reject(err); + }; + mapper[name] = function (id, _opts) { + var self = this; + if (isObject(id)) { + _opts = id; + } + _opts = _opts || {}; + var adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http'); + var config = {}; + 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, isSorN(id) ? id : null, _opts)]; + if (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; + deepMixIn(config)(_opts); + return 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; + }; + }; - return DSHttpAdapter; - }(); + /** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @name HttpAdapter.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. + */ + HttpAdapter.addActions = function (opts) { + opts || (opts = {}); + return function (mapper) { + forOwn(mapper, function (value, key) { + HttpAdapter.addAction(key, value)(mapper); + }); + return mapper; + }; + }; /** * Alternative to ES6 class syntax for extending `HttpAdapter`. @@ -1285,12 +1527,12 @@ return /******/ (function(modules) { // webpackBootstrap * @property {(string|boolean)} version.beta The beta version value, * otherwise `false` if the current version is not beta. */ - DSHttpAdapter.version = { - full: '2.2.0', - major: parseInt('2', 10), - minor: parseInt('2', 10), + HttpAdapter.version = { + full: '3.0.0-alpha.5', + major: parseInt('3', 10), + minor: parseInt('0', 10), patch: parseInt('0', 10), - alpha: true ? 'false' : false, + alpha: true ? '5' : false, beta: true ? 'false' : false }; @@ -2516,1194 +2758,6 @@ return /******/ (function(modules) { // webpackBootstrap }; -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(3); - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var defaults = __webpack_require__(4); - var utils = __webpack_require__(5); - var dispatchRequest = __webpack_require__(6); - var InterceptorManager = __webpack_require__(15); - var isAbsoluteURL = __webpack_require__(16); - var combineURLs = __webpack_require__(17); - var bind = __webpack_require__(18); - var transformData = __webpack_require__(11); - - 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); - - axios.create = function create(defaultConfig) { - return new Axios(defaultConfig); - }; - - // Expose defaults - axios.defaults = defaultInstance.defaults; - - // Expose all/spread - axios.all = function all(promises) { - return Promise.all(promises); - }; - axios.spread = __webpack_require__(19); - - // Expose interceptors - axios.interceptors = defaultInstance.interceptors; - - // 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); - }); - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - var PROTECTION_PREFIX = /^\)\]\}',?\n/; - var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - - module.exports = { - transformRequest: [function transformResponseJSON(data, headers) { - if (utils.isFormData(data)) { - return data; - } - if (utils.isArrayBuffer(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 transformResponseJSON(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' - }; - - -/***/ }, -/* 5 */ -/***/ 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]'; - } - - /** - * 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, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - trim: trim - }; - - -/***/ }, -/* 6 */ -/***/ 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__(8); - } else if (typeof process !== 'undefined') { - // For node use HTTP adapter - adapter = __webpack_require__(8); - } - - if (typeof adapter === 'function') { - adapter(resolve, reject, config); - } - } catch (e) { - reject(e); - } - }); - }; - - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }, -/* 7 */ -/***/ 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; }; - - -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - var buildURL = __webpack_require__(9); - var parseHeaders = __webpack_require__(10); - var transformData = __webpack_require__(11); - var isURLSameOrigin = __webpack_require__(12); - var btoa = window.btoa || __webpack_require__(13); - - 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(); - - // For IE 8/9 CORS support - // Only supports POST and GET calls and doesn't returns the response headers. - if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { - request = new window.XDomainRequest(); - } - - // 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.onload = function handleLoad() { - if (!request) { - return; - } - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? 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 - }; - - // Resolve or reject the Promise based on the status - ((response.status >= 200 && response.status < 300) || - (!('status' in request) && response.responseText) ? - 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; - }; - - // 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__(14); - - // 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; - } - } - } - - if (utils.isArrayBuffer(requestData)) { - requestData = new DataView(requestData); - } - - // Send the request - request.send(requestData); - }; - - -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - 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; - }; - - - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - /** - * 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; - }; - - -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - /** - * 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; - }; - - -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - 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; - }; - })() - ); - - -/***/ }, -/* 13 */ -/***/ function(module, exports) { - - 'use strict'; - - // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js - - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - function InvalidCharacterError(message) { - this.message = message; - } - InvalidCharacterError.prototype = new Error; - InvalidCharacterError.prototype.code = 5; - InvalidCharacterError.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 InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5'); - } - block = block << 8 | charCode; - } - return output; - } - - module.exports = btoa; - - -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - 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() {} - }; - })() - ); - - -/***/ }, -/* 15 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var utils = __webpack_require__(5); - - 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; - - -/***/ }, -/* 16 */ -/***/ 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); - }; - - -/***/ }, -/* 17 */ -/***/ 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(/^\/+/, ''); - }; - - -/***/ }, -/* 18 */ -/***/ 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); - }; - }; - - -/***/ }, -/* 19 */ -/***/ 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); - }; - }; - - /***/ } /******/ ]) }); diff --git a/dist/js-data-http.js.map b/dist/js-data-http.js.map index 7ba968c..01bcabf 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 dc9e06bee79fb8e9d11c","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","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/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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AQ,WAAR,GAAsB,QAAQ,WAAR,GAAsB,MAAM,QAAN,CAAe,WAAf,CAA7C,CAAyE,cAAzE,EAAyF,IAAzF;QAAV,CAHP,CAT2C;;;;UArQzC;;;AAqRN,eAAc,OAAd,GAAwB;AACtB,SAAM,oBAAN;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,QAA6B,cAA7B,GAA8C,KAA9C;AACP,SAAM,QAA4B,aAA5B,GAA4C,KAA5C;EANR;;AASA,QAAO,OAAP,GAAiB,aAAjB,C;;;;;;ACpUA,gD;;;;;;ACAA,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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;;;;;;;ACvHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;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;AACA;;;;;;;AC9DA;;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,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;;;;;;;ACnPA;;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;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;;;;;;ACjIA;;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;;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[\"DSHttpAdapter\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"DSHttpAdapter\"] = 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 dc9e06bee79fb8e9d11c\n **/","let JSData = require('js-data')\nlet axios = null\n\ntry {\n axios = require('axios')\n} catch (e) {}\n\nlet { DSUtils } = JSData\nlet { deepMixIn, removeCircular, copy, makePath, isString, isNumber } = DSUtils\n\nclass Defaults {\n queryTransform (resourceConfig, params) {\n return params\n }\n\n deserialize (resourceConfig, data) {\n return data ? ('data' in data ? data.data : data) : data\n }\n\n serialize (resourceConfig, data) {\n return data\n }\n\n log () {}\n\n error () {}\n}\n\nlet defaultsPrototype = Defaults.prototype\n\ndefaultsPrototype.basePath = ''\n\ndefaultsPrototype.forceTrailingSlash = ''\n\ndefaultsPrototype.httpConfig = {}\n\ndefaultsPrototype.verbsUseBasePath = false\n\nclass DSHttpAdapter {\n constructor (options) {\n options = options || {}\n this.defaults = new Defaults()\n if (console) {\n this.defaults.log = (a, b) => console[typeof console.info === 'function' ? 'info' : 'log'](a, b)\n }\n if (console) {\n this.defaults.error = (a, b) => console[typeof console.error === 'function' ? 'error' : 'log'](a, b)\n }\n deepMixIn(this.defaults, options)\n this.http = options.http || axios\n }\n\n getEndpoint (resourceConfig, id, options) {\n options = options || {}\n options.params = options.params || {}\n\n let endpoint = options.hasOwnProperty('endpoint') ? options.endpoint : resourceConfig.endpoint\n let parents = resourceConfig.parents || (resourceConfig.parent ? {\n [resourceConfig.parent]: {\n key: resourceConfig.parentKey,\n field: resourceConfig.parentField\n }\n } : {})\n\n DSUtils.forOwn(parents, function (parent, parentName) {\n let item\n let parentKey = parent.key\n let parentField = parent.field\n let parentDef = resourceConfig.getResource(parentName)\n let parentId = options.params[parentKey]\n\n if (parentId === false || !parentKey || !parentDef) {\n if (parentId === false) {\n delete options.params[parentKey]\n }\n } else {\n delete options.params[parentKey]\n\n if (DSUtils._sn(id)) {\n item = resourceConfig.get(id)\n } else if (DSUtils._o(id)) {\n item = id\n }\n console.log('item', item)\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete options.endpoint\n let _options = {}\n DSUtils.forOwn(options, (value, key) => {\n _options[key] = value\n })\n endpoint = DSUtils.makePath(this.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint)\n }\n }\n }, this)\n\n return endpoint\n }\n\n getPath (method, resourceConfig, id, options) {\n let _this = this\n options = options || {}\n if (isString(options.urlPath)) {\n return makePath.apply(DSUtils, [options.basePath || _this.defaults.basePath || resourceConfig.basePath, options.urlPath])\n } else {\n let args = [\n options.basePath || _this.defaults.basePath || resourceConfig.basePath,\n this.getEndpoint(resourceConfig, (isString(id) || isNumber(id) || method === 'create') ? id : null, options)\n ]\n if (method === 'find' || method === 'update' || method === 'destroy') {\n args.push(id)\n }\n return makePath.apply(DSUtils, args)\n }\n }\n\n HTTP (config) {\n let _this = this\n let start = new Date()\n config = copy(config)\n config = deepMixIn(config, _this.defaults.httpConfig)\n if (!('verbsUseBasePath' in config)) {\n config.verbsUseBasePath = _this.defaults.verbsUseBasePath\n }\n if (!config.urlOverride && config.verbsUseBasePath) {\n config.url = makePath(config.basePath || _this.defaults.basePath, config.url)\n }\n if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/' && !config.urlOverride) {\n config.url += '/'\n }\n if (typeof config.data === 'object') {\n config.data = removeCircular(config.data)\n }\n config.method = config.method.toUpperCase()\n let suffix = config.suffix || _this.defaults.suffix\n if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix && !config.urlOverride) {\n config.url += suffix\n }\n\n // logs the HTTP response\n function logResponse (data, isRejection) {\n data = data || {}\n // examine the data object\n if (data instanceof Error) {\n // log the Error object\n _this.defaults.error(`FAILED: ${data.message || 'Unknown Error'}`, data)\n return DSUtils.Promise.reject(data)\n } else if (typeof data === 'object') {\n let str = `${start.toUTCString()} - ${config.method} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms`\n\n if (data.status >= 200 && data.status < 300 && !isRejection) {\n if (_this.defaults.log) {\n _this.defaults.log(str, data)\n }\n return data\n } else {\n if (_this.defaults.error) {\n _this.defaults.error(`FAILED: ${str}`, data)\n }\n return DSUtils.Promise.reject(data)\n }\n } else {\n // unknown type for 'data' that is not an Object or Error\n _this.defaults.error('FAILED', data)\n return DSUtils.Promise.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 this.http(config).then(logResponse, function (data) {\n return logResponse(data, true)\n })\n }\n\n GET (url, config) {\n config = config || {}\n config.method = config.method || 'get'\n config.urlOverride = !!config.url\n config.url = config.url || url\n return this.HTTP(config)\n }\n\n POST (url, attrs, config) {\n config = config || {}\n config.method = config.method || 'post'\n config.urlOverride = !!config.url\n config.url = config.url || url\n config.data = config.data || attrs\n return this.HTTP(config)\n }\n\n PUT (url, attrs, config) {\n config = config || {}\n config.method = config.method || 'put'\n config.urlOverride = !!config.url\n config.url = config.url || url\n config.data = config.data || attrs\n return this.HTTP(config)\n }\n\n DEL (url, config) {\n config = config || {}\n config.method = config.method || 'delete'\n config.urlOverride = !!config.url\n config.url = config.url || url\n return this.HTTP(config)\n }\n\n find (resourceConfig, id, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.GET(\n _this.getPath('find', resourceConfig, id, options),\n options\n ).then((data) => {\n let item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)\n return !item ? DSUtils.Promise.reject(new Error('Not Found!')) : item\n })\n }\n\n findAll (resourceConfig, params, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return _this.GET(\n _this.getPath('findAll', resourceConfig, params, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n create (resourceConfig, attrs, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.POST(\n _this.getPath('create', resourceConfig, attrs, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n update (resourceConfig, id, attrs, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.PUT(\n _this.getPath('update', resourceConfig, id, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n updateAll (resourceConfig, attrs, params, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return this.PUT(\n _this.getPath('updateAll', resourceConfig, attrs, options),\n options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n destroy (resourceConfig, id, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n options.params = _this.defaults.queryTransform(resourceConfig, options.params)\n return _this.DEL(\n _this.getPath('destroy', resourceConfig, id, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n\n destroyAll (resourceConfig, params, options) {\n let _this = this\n options = options ? copy(options) : {}\n options.suffix = options.suffix || resourceConfig.suffix\n options.params = options.params || {}\n if (params) {\n params = _this.defaults.queryTransform(resourceConfig, params)\n deepMixIn(options.params, params)\n }\n return this.DEL(\n _this.getPath('destroyAll', resourceConfig, params, options),\n options\n ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data))\n }\n}\n\nDSHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\n\nmodule.exports = DSHttpAdapter\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 **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 2\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\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\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 = 3\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 transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(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 transformResponseJSON(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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 4\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 * 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 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 = 5\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 = 6\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 = 7\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 = window.btoa || require('./../helpers/btoa');\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\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\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 // Listen for ready state\n request.onload = function handleLoad() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? 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 };\n\n // Resolve or reject the Promise based on the status\n ((response.status >= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n 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 // 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 if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\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 = 8\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 = 9\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 = 10\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 = 11\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 = 12\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 InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.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 InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\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 = 13\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 = 14\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 = 15\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 = 16\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 = 17\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 = 18\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 = 19\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap dc50af3c81144d167d2c","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","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/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;;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;;;;;;;ACvHD;;AAEA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;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;AACA;;;;;;;AC9DA;;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,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;;;;;;;ACnPA;;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;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;;;;;;ACjIA;;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;;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[\"HttpAdapter\"] = factory(require(\"js-data\"));\n\telse\n\t\troot[\"HttpAdapter\"] = 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 dc50af3c81144d167d2c\n **/","/* global fetch:true Headers:true Request:true */\nconst axios = require('axios')\nimport {utils} from 'js-data'\nconst {\n _,\n addHiddenPropsToTarget,\n copy,\n deepMixIn,\n extend,\n fillIn,\n forOwn,\n isArray,\n isFunction,\n isNumber,\n isObject,\n isSorN,\n isString,\n isUndefined,\n resolve,\n reject,\n toJson\n} = utils\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 forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!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 (isObject(v)) {\n v = 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 noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n}\n\nconst noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\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#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\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 * @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\n // Default values for arguments\n opts || (opts = {})\n\n fillIn(self, opts)\n fillIn(self, DEFAULTS)\n}\n\naddHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreate: noop2,\n\n /**\n * @name HttpAdapter#afterCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreateMany: noop2,\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#afterDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroy: noop2,\n\n /**\n * @name HttpAdapter#afterDestroyAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroyAll: noop2,\n\n /**\n * @name HttpAdapter#afterFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFind: noop2,\n\n /**\n * @name HttpAdapter#afterFindAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFindAll: 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#afterUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdate: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateAll: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateMany: noop2,\n\n /**\n * @name HttpAdapter#beforeCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n */\n beforeCreate: noop,\n\n /**\n * @name HttpAdapter#beforeCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeCreateMany: noop,\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#beforeDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeDestroy: noop,\n\n /**\n * @name HttpAdapter#beforeDestroyAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeDestroyAll: noop,\n\n /**\n * @name HttpAdapter#beforeFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeFind: noop,\n\n /**\n * @name HttpAdapter#beforeFindAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeFindAll: 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 /**\n * @name HttpAdapter#beforeUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n */\n beforeUpdate: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n */\n beforeUpdateAll: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeUpdateMany: noop,\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts)).then(function () {\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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} 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 createMany (mapper, records, opts) {\n const self = this\n let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'createMany'\n self.dbg(op, mapper, records, opts)\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n },\n\n /**\n * Call {@link HttpAdapter#log} at the \"debug\" level.\n *\n * @name HttpAdapter#dbg\n * @method\n * @param {...*} [args] Args passed to {@link HttpAdapter#log}.\n */\n dbg (...args) {\n this.log('debug', ...args)\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (opts.raw) {\n return response\n }\n return response ? ('data' in response ? response.data : response) : 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 = 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 || (opts.params = {})\n\n let endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint\n let parents = mapper.parents || (mapper.parent ? {\n [mapper.parent]: {\n key: mapper.parentKey,\n field: mapper.parentField\n }\n } : {})\n\n forOwn(parents, function (parent, parentName) {\n let item\n let parentKey = parent.key\n let parentField = parent.field\n let parentDef = mapper.getResource(parentName)\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 (isString(id) || isNumber(id)) {\n item = mapper.get(id)\n } else if (isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n _(_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 opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (isString(id) || 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 /**\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 config = copy(config)\n config = deepMixIn(config, self.httpConfig)\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 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 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * Log the provided arguments at the specified leve.\n *\n * @name HttpAdapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} [args] Arguments 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()}: (HttpAdapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (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 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 (isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts)).then(function () {\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts)).then(function () {\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.addAction = function (name, opts) {\n if (!name || !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 reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n 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, isSorN(id) ? id : null, _opts)\n ]\n if (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 deepMixIn(config)(_opts)\n return 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 HttpAdapter.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 */\nHttpAdapter.addActions = function (opts) {\n opts || (opts = {})\n return function (mapper) {\n forOwn(mapper, function (value, key) {\n HttpAdapter.addAction(key, value)(mapper)\n })\n return mapper\n }\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 = extend\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\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\nmodule.exports = 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 **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 2\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\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\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 = 3\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 transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(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 transformResponseJSON(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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 4\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 * 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 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 = 5\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 = 6\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 = 7\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 = window.btoa || require('./../helpers/btoa');\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\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\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 // Listen for ready state\n request.onload = function handleLoad() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? 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 };\n\n // Resolve or reject the Promise based on the status\n ((response.status >= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n 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 // 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 if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\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 = 8\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 = 9\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 = 10\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 = 11\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 = 12\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 InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.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 InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\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 = 13\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 = 14\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 = 15\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 = 16\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 = 17\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 = 18\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 = 19\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 afd9426..0d270aa 100644 --- a/dist/js-data-http.min.js +++ b/dist/js-data-http.min.js @@ -1,11 +1,11 @@ /*! * js-data-http -* @version 2.2.0 - Homepage +* @version 3.0.0-alpha.5 - Homepage * @author Jason Dobry -* @copyright (c) 2014-2016 Jason Dobry +* @copyright (c) 2014-2015 Jason Dobry * @license MIT * * @overview HTTP adapter for js-data. */ -!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.DSHttpAdapter=t(require("js-data")):e.DSHttpAdapter=t(e.JSData)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a="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=function(){function e(e,t){for(var r=0;r=200&&t.status<300&&!o?(r.defaults.log&&r.defaults.log(i,t),t):(r.defaults.error&&r.defaults.error("FAILED: "+i,t),f.Promise.reject(t))}return r.defaults.error("FAILED",t),f.Promise.reject(t)}var r=this,n=new Date;e=p(e),e=l(e,r.defaults.httpConfig),"verbsUseBasePath"in e||(e.verbsUseBasePath=r.defaults.verbsUseBasePath),!e.urlOverride&&e.verbsUseBasePath&&(e.url=d(e.basePath||r.defaults.basePath,e.url)),r.defaults.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&!e.urlOverride&&(e.url+="/"),"object"===a(e.data)&&(e.data=c(e.data)),e.method=e.method.toUpperCase();var o=e.suffix||r.defaults.suffix;if(o&&e.url.substr(e.url.length-o.length)!==o&&!e.urlOverride&&(e.url+=o),!this.http)throw new Error("You have not configured this adapter with an http library!");return this.http(e).then(t,function(e){return t(e,!0)})}},{key:"GET",value:function(e,t){return t=t||{},t.method=t.method||"get",t.urlOverride=!!t.url,t.url=t.url||e,this.HTTP(t)}},{key:"POST",value:function(e,t,r){return r=r||{},r.method=r.method||"post",r.urlOverride=!!r.url,r.url=r.url||e,r.data=r.data||t,this.HTTP(r)}},{key:"PUT",value:function(e,t,r){return r=r||{},r.method=r.method||"put",r.urlOverride=!!r.url,r.url=r.url||e,r.data=r.data||t,this.HTTP(r)}},{key:"DEL",value:function(e,t){return t=t||{},t.method=t.method||"delete",t.urlOverride=!!t.url,t.url=t.url||e,this.HTTP(t)}},{key:"find",value:function(e,t,r){var n=this;return r=r?p(r):{},r.suffix=r.suffix||e.suffix,r.params=r.params||{},r.params=n.defaults.queryTransform(e,r.params),n.GET(n.getPath("find",e,t,r),r).then(function(t){var o=(r.deserialize?r.deserialize:n.defaults.deserialize)(e,t);return o?o:f.Promise.reject(new Error("Not Found!"))})}},{key:"findAll",value:function(e,t,r){var n=this;return r=r?p(r):{},r.suffix=r.suffix||e.suffix,r.params=r.params||{},t&&(t=n.defaults.queryTransform(e,t),l(r.params,t)),n.GET(n.getPath("findAll",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:n.defaults.deserialize)(e,t)})}},{key:"create",value:function(e,t,r){var n=this;return r=r?p(r):{},r.suffix=r.suffix||e.suffix,r.params=r.params||{},r.params=n.defaults.queryTransform(e,r.params),n.POST(n.getPath("create",e,t,r),r.serialize?r.serialize(e,t):n.defaults.serialize(e,t),r).then(function(t){return(r.deserialize?r.deserialize:n.defaults.deserialize)(e,t)})}},{key:"update",value:function(e,t,r,n){var o=this;return n=n?p(n):{},n.suffix=n.suffix||e.suffix,n.params=n.params||{},n.params=o.defaults.queryTransform(e,n.params),o.PUT(o.getPath("update",e,t,n),n.serialize?n.serialize(e,r):o.defaults.serialize(e,r),n).then(function(t){return(n.deserialize?n.deserialize:o.defaults.deserialize)(e,t)})}},{key:"updateAll",value:function(e,t,r,n){var o=this;return n=n?p(n):{},n.suffix=n.suffix||e.suffix,n.params=n.params||{},r&&(r=o.defaults.queryTransform(e,r),l(n.params,r)),this.PUT(o.getPath("updateAll",e,t,n),n.serialize?n.serialize(e,t):o.defaults.serialize(e,t),n).then(function(t){return(n.deserialize?n.deserialize:o.defaults.deserialize)(e,t)})}},{key:"destroy",value:function(e,t,r){var n=this;return r=r?p(r):{},r.suffix=r.suffix||e.suffix,r.params=r.params||{},r.params=n.defaults.queryTransform(e,r.params),n.DEL(n.getPath("destroy",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:n.defaults.deserialize)(e,t)})}},{key:"destroyAll",value:function(e,t,r){var n=this;return r=r?p(r):{},r.suffix=r.suffix||e.suffix,r.params=r.params||{},t&&(t=n.defaults.queryTransform(e,t),l(r.params,t)),this.DEL(n.getPath("destroyAll",e,t,r),r).then(function(t){return(r.deserialize?r.deserialize:n.defaults.deserialize)(e,t)})}}]),e}();g.version={full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"},e.exports=g},function(t,r){t.exports=e},function(e,t,r){e.exports=r(3)},function(e,t,r){"use strict";function n(e){this.defaults=a.merge({},e),this.interceptors={request:new s,response:new s}}var o=r(4),a=r(5),i=r(6),s=r(15),u=r(16),f=r(17),l=r(18),c=r(11);n.prototype.request=function(e){"string"==typeof e&&(e=a.merge({url:arguments[0]},arguments[1])),e=a.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!u(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=a.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),a.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[i,void 0],r=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;)r=r.then(t.shift(),t.shift());return r};var p=new n(o),d=e.exports=l(n.prototype.request,p);d.create=function(e){return new n(e)},d.defaults=p.defaults,d.all=function(e){return Promise.all(e)},d.spread=r(19),d.interceptors=p.interceptors,a.forEach(["delete","get","head"],function(e){n.prototype[e]=function(t,r){return this.request(a.merge(r||{},{method:e,url:t}))},d[e]=l(n.prototype[e],p)}),a.forEach(["post","put","patch"],function(e){n.prototype[e]=function(t,r,n){return this.request(a.merge(n||{},{method:e,url:t,data:r}))},d[e]=l(n.prototype[e],p)})},function(e,t,r){"use strict";var n=r(5),o=/^\)\]\}',?\n/,a={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return n.isFormData(e)?e:n.isArrayBuffer(e)?e:n.isArrayBufferView(e)?e.buffer:!n.isObject(e)||n.isFile(e)||n.isBlob(e)?e:(n.isUndefined(t)||(n.forEach(t,function(e,r){"content-type"===r.toLowerCase()&&(t["Content-Type"]=e)}),n.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:n.merge(a),post:n.merge(a),put:n.merge(a)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},function(e,t){"use strict";function r(e){return"[object Array]"===v.call(e)}function n(e){return"[object ArrayBuffer]"===v.call(e)}function o(e){return"[object FormData]"===v.call(e)}function a(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function i(e){return"string"==typeof e}function s(e){return"number"==typeof e}function u(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===v.call(e)}function c(e){return"[object File]"===v.call(e)}function p(e){return"[object Blob]"===v.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function h(){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||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var a in e)e.hasOwnProperty(a)&&t.call(null,e[a],a,e)}function y(){function e(e,r){"object"==typeof t[r]&&"object"==typeof e?t[r]=y(t[r],e):t[r]=e}for(var t={},r=0,n=arguments.length;n>r;r++)m(arguments[r],e);return t}var v=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:n,isFormData:o,isArrayBufferView:a,isString:i,isNumber:s,isObject:f,isUndefined:u,isDate:l,isFile:c,isBlob:p,isStandardBrowserEnv:h,forEach:m,merge:y,trim:d}},function(e,t,r){(function(t){"use strict";e.exports=function(e){return new Promise(function(n,o){try{var a;"function"==typeof e.adapter?a=e.adapter:"undefined"!=typeof XMLHttpRequest?a=r(8):"undefined"!=typeof t&&(a=r(8)),"function"==typeof a&&a(n,o,e)}catch(e){o(e)}})}}).call(t,r(7))},function(e,t){function r(){f=!1,i.length?u=i.concat(u):l=-1,u.length&&n()}function n(){if(!f){var e=setTimeout(r);f=!0;for(var t=u.length;t;){for(i=u,u=[];++l1)for(var r=1;r=200&&o.status<300||!("status"in p)&&o.responseText?e:t)(o),p=null}},p.onerror=function(){t(new Error("Network Error")),p=null},n.isStandardBrowserEnv()){var m=r(14),y=f.withCredentials||s(f.url)?m.read(f.xsrfCookieName):void 0;y&&(c[f.xsrfHeaderName]=y)}if("setRequestHeader"in p&&n.forEach(c,function(e,t){"undefined"==typeof l&&"content-type"===t.toLowerCase()?delete c[t]:p.setRequestHeader(t,e)}),f.withCredentials&&(p.withCredentials=!0),f.responseType)try{p.responseType=f.responseType}catch(e){if("json"!==p.responseType)throw e}n.isArrayBuffer(l)&&(l=new DataView(l)),p.send(l)}},function(e,t,r){"use strict";function n(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 o=r(5);e.exports=function(e,t,r){if(!t)return e;var a;if(r)a=r(t);else{var i=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),i.push(n(t)+"="+n(e))}))}),a=i.join("&")}return a&&(e+=(-1===e.indexOf("?")?"?":"&")+a),e}},function(e,t,r){"use strict";var n=r(5);e.exports=function(e){var t,r,o,a={};return e?(n.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=n.trim(e.substr(0,o)).toLowerCase(),r=n.trim(e.substr(o+1)),t&&(a[t]=a[t]?a[t]+", "+r:r)}),a):a}},function(e,t,r){"use strict";var n=r(5);e.exports=function(e,t,r){return n.forEach(r,function(r){e=r(e,t)}),e}},function(e,t,r){"use strict";var n=r(5);e.exports=n.isStandardBrowserEnv()?function(){function e(e){var t=e;return r&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,r=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(r){var o=n.isString(r)?e(r):r;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function r(e){this.message=e}function n(e){for(var t,n,a=String(e),i="",s=0,u=o;a.charAt(0|s)||(u="=",s%1);i+=u.charAt(63&t>>8-s%1*8)){if(n=a.charCodeAt(s+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return i}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=n},function(e,t,r){"use strict";var n=r(5);e.exports=n.isStandardBrowserEnv()?function(){return{write:function(e,t,r,o,a,i){var s=[];s.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),n.isString(o)&&s.push("path="+o),n.isString(a)&&s.push("domain="+a),i===!0&&s.push("secure"),document.cookie=s.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,r){"use strict";function n(){this.handlers=[]}var o=r(5);n.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},n.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},n.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=n},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 r=new Array(arguments.length),n=0;nr;r++)t[r]=arguments[r];var n=i(t,"/");return n.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,t){if(!t)return e;var r=[];return b(t,function(e,t){null!==e&&"undefined"!=typeof e&&(x(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():A(e)&&(e=D(e)),r.push(u(t)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function f(e){var t=this;e||(e={}),v(t,e),v(t,z)}var c="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},p=r(1),l=r(2),d=p.utils._,h=p.utils.addHiddenPropsToTarget,m=p.utils.copy,y=p.utils.deepMixIn,g=p.utils.extend,v=p.utils.fillIn,b=p.utils.forOwn,x=p.utils.isArray,T=p.utils.isFunction,w=p.utils.isNumber,A=p.utils.isObject,E=p.utils.isSorN,P=p.utils.isString,C=p.utils.isUndefined,S=p.utils.resolve,j=p.utils.reject,D=p.utils.toJson,U=!1;try{U=window&&window.fetch}catch(e){}var q=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-1];e.dbg.apply(e,[o.op].concat(r))},O=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-2];e.dbg.apply(e,[o.op].concat(r))},z={basePath:"",debug:!1,forceTrailingSlash:!1,http:l,httpConfig:{},suffix:"",useFetch:!1};h(f.prototype,{afterCreate:O,afterCreateMany:O,afterDEL:O,afterDestroy:O,afterDestroyAll:O,afterFind:O,afterFindAll:O,afterGET:O,afterHTTP:O,afterPOST:O,afterPUT:O,afterUpdate:O,afterUpdateAll:O,afterUpdateMany:O,beforeCreate:q,beforeCreateMany:q,beforeDEL:q,beforeDestroy:q,beforeDestroyAll:q,beforeFind:q,beforeFindAll:q,beforeGET:q,beforeHTTP:q,beforePOST:q,beforePUT:q,beforeUpdate:q,beforeUpdateAll:q,beforeUpdateMany:q,create:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreate",S(n[o](e,t,r)).then(function(){return o=r.op="create",n.dbg(o,e,t,r),n.POST(n.getPath("create",e,t,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterCreate",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},createMany:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreateMany",S(n[o](e,t,r)).then(function(){return o=r.op="createMany",n.dbg(o,e,t,r),n.POST(n.getPath("createMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterCreateMany",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},dbg:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];this.log.apply(this,["debug"].concat(t))},DEL:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"delete",o=r.op="beforeDEL",S(n[o](e,t,r)).then(function(i){return t=C(i)?t:i,o=r.op="DEL",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(i){return o=r.op="afterDEL",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},deserialize:function(e,t,r){return r||(r={}),T(r.deserialize)?r.deserialize(e,t,r):T(e.deserialize)?e.deserialize(e,t,r):r.raw?t:t&&"data"in t?t.data:t},destroy:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroy",S(n[o](e,t,r)).then(function(){return o=r.op="destroy",n.dbg(o,e,t,r),n.DEL(n.getPath("destroy",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterDestroy",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},destroyAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?m(r):{},r.params||(r.params={}),y(r.params,t),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroyAll",S(n.beforeDestroyAll(e,t,r)).then(function(){return o=r.op="destroyAll",n.dbg(o,e,t,r),n.DEL(n.getPath("destroyAll",e,null,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterDestroyAll",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=D(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,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeFind",S(n[o](e,t,r)).then(function(){return o=r.op="find",n.dbg(o,e,t,r),n.GET(n.getPath("find",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterFind",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},findAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?m(r):{},r.params||(r.params={}),r.suffix=C(r.suffix)?e.suffix:r.suffix,y(r.params,t),r.params=n.queryTransform(e,r.params,r),o=r.op="beforeFindAll",S(n[o](e,t,r)).then(function(){return o=r.op="findAll",n.dbg(o,e,t,r),n.GET(n.getPath("findAll",e,r.params,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterFindAll",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},GET:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"get",o=r.op="beforeGET",S(n[o](e,t,r)).then(function(i){return t=C(i)?t:i,o=r.op="GET",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(i){return o=r.op="afterGET",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})},getEndpoint:function(e,t,r){var o=this;r||(r={}),r.params||(r.params={});var i=r.hasOwnProperty("endpoint")?r.endpoint:e.endpoint,u=e.parents||(e.parent?n({},e.parent,{key:e.parentKey,field:e.parentField}):{});return b(u,function(n,u){var s=void 0,f=n.key,p=n.field,l=e.getResource(u),h=r.params[f];if(h===!1||!f||!l)return h===!1&&delete r.params[f],!1;if(delete r.params[f],P(t)||w(t)?s=e.get(t):A(t)&&(s=t),s&&(h=h||s[f]||(s[p]?s[p][l.idAttribute]:null)),h){var m=function(){delete r.endpoint;var e={};return b(r,function(t,r){e[r]=t}),d(e,l),i=a(o.getEndpoint(l,h,e,h,i)),{v:!1}}();if("object"===("undefined"==typeof m?"undefined":c(m)))return m.v}}),i},getPath:function(e,t,r,n){var o=this;n||(n={});var i=[void 0===n.basePath?void 0===t.basePath?o.basePath:t.basePath:n.basePath,o.getEndpoint(t,P(r)||w(r)||"create"===e?r:null,n)];return"find"!==e&&"update"!==e&&"destroy"!==e||i.push(r),a.apply(p.utils,i)},HTTP:function(e,t){function r(t){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(n.log&&n.dbg("debug",r,t),t):(n.error&&n.error("'FAILED: "+r,t),j(t))}var n=this,o=new Date;t||(t={}),e=m(e),e=y(e,n.httpConfig),n.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var i=e.suffix||t.suffix||n.suffix;if(i&&e.url.substr(e.url.length-i.length)!==i&&(e.url+=i),!n.http)throw new Error("You have not configured this adapter with an http library!");return S(n.beforeHTTP(e,t)).then(function(o){return e=o||e,U&&(n.useFetch||t.useFetch||!n.http)?n.fetch(e,t).then(r,r):n.http(e).then(r,r).catch(function(r){return n.responseError(r,e,t)})}).then(function(r){return S(n.afterHTTP(e,t,r)).then(function(e){return e||r})})},log:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];if(e&&!r.length&&(r.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (HttpAdapter)";if(console[e]){var i;(i=console)[e].apply(i,[o].concat(r))}else{var a;(a=console).log.apply(a,[o].concat(r))}}},POST:function(e,t,r,n){var o=this,i=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"post",i=n.op="beforePOST",S(o[i](e,t,r,n)).then(function(a){return r=C(a)?r:a,i=n.op="POST",o.dbg(i,e,t,r,n),o.HTTP(r,n)}).then(function(a){return i=n.op="afterPOST",S(o[i](e,t,r,n,a)).then(function(e){return C(e)?a:e})})},PUT:function(e,t,r,n){var o=this,i=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"put",i=n.op="beforePUT",S(o[i](e,t,r,n)).then(function(a){return r=C(a)?r:a,i=n.op="PUT",o.dbg(i,e,t,r,n),o.HTTP(r,n)}).then(function(a){return i=n.op="afterPUT",S(o[i](e,t,r,n,a)).then(function(e){return C(e)?a:e})})},queryTransform:function(e,t,r){return r||(r={}),T(r.queryTransform)?r.queryTransform(e,t,r):T(e.queryTransform)?e.queryTransform(e,t,r):t},responseError:function(e,t,r){return j(e)},serialize:function(e,t,r){return r||(r={}),T(r.serialize)?r.serialize(e,t,r):T(e.serialize)?e.serialize(e,t,r):t},update:function(e,t,r,n){var o=this,i=void 0;return n=n?m(n):{},n.params||(n.params={}),n.params=o.queryTransform(e,n.params,n),n.suffix=C(n.suffix)?e.suffix:n.suffix,i=n.op="beforeUpdate",S(o[i](e,t,r,n)).then(function(){return i=n.op="update",o.dbg(i,e,t,r,n),o.PUT(o.getPath("update",e,t,n),o.serialize(e,r,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(a){return i=n.op="afterUpdate",S(o[i](e,t,r,n,a)).then(function(e){return C(e)?a:e})})},updateAll:function(e,t,r,n){var o=this,i=void 0;return r||(r={}),n=n?m(n):{},n.params||(n.params={}),y(n.params,r),n.params=o.queryTransform(e,n.params,n),n.suffix=C(n.suffix)?e.suffix:n.suffix,i=n.op="beforeUpdateAll",S(o[i](e,t,r,n)).then(function(){return i=n.op="updateAll",o.dbg(i,e,t,r,n),o.PUT(o.getPath("updateAll",e,null,n),o.serialize(e,t,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(a){return i=n.op="afterUpdateAll",S(o[i](e,t,r,n,a)).then(function(e){return C(e)?a:e})})},updateMany:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=C(r.suffix)?e.suffix:r.suffix,o=r.op="beforeUpdateMany",S(n[o](e,t,r)).then(function(){return o=r.op="updateMany",n.dbg(o,e,t,r),n.PUT(n.getPath("updateMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(i){return o=r.op="afterUpdateMany",S(n[o](e,t,r,i)).then(function(e){return C(e)?i:e})})}}),f.addAction=function(e,t){if(!e||!P(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":c(e)));return function(r){if(r[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 j(e)},r[e]=function(r,n){var o=this;A(r)&&(n=r),n=n||{};var i=o.getAdapter(t.adapter||o.defaultAdapter||"http"),u={};if(v(u,t),!n.hasOwnProperty("endpoint")&&u.endpoint&&(n.endpoint=u.endpoint),"function"==typeof n.getEndpoint)u.url=n.getEndpoint(o,n);else{var s=[n.basePath||o.basePath||i.basePath,i.getEndpoint(o,E(r)?r:null,n)];E(r)&&s.push(r),s.push(t.pathname||e),u.url=a.apply(null,s)}return u.method=u.method||"GET",u.mapper=o.name,y(u)(n),S(u).then(n.request||t.request).then(function(e){return i.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(n.response||t.response,n.responseError||t.responseError)},r}},f.addActions=function(e){return e||(e={}),function(e){return b(e,function(t,r){f.addAction(r,t)(e)}),e}},f.extend=g,f.version={full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"},e.exports=f},function(t,r){t.exports=e},function(e,t,r){e.exports=r(3)},function(e,t,r){"use strict";function n(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=r(4),i=r(5),a=r(6),u=r(15),s=r(16),f=r(17),c=r(18),p=r(11);n.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=p(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=[a,void 0],r=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;)r=r.then(t.shift(),t.shift());return r};var l=new n(o),d=e.exports=c(n.prototype.request,l);d.create=function(e){return new n(e)},d.defaults=l.defaults,d.all=function(e){return Promise.all(e)},d.spread=r(19),d.interceptors=l.interceptors,i.forEach(["delete","get","head"],function(e){n.prototype[e]=function(t,r){return this.request(i.merge(r||{},{method:e,url:t}))},d[e]=c(n.prototype[e],l)}),i.forEach(["post","put","patch"],function(e){n.prototype[e]=function(t,r,n){return this.request(i.merge(n||{},{method:e,url:t,data:r}))},d[e]=c(n.prototype[e],l)})},function(e,t,r){"use strict";var n=r(5),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(e,t){return n.isFormData(e)?e:n.isArrayBuffer(e)?e:n.isArrayBufferView(e)?e.buffer:!n.isObject(e)||n.isFile(e)||n.isBlob(e)?e:(n.isUndefined(t)||(n.forEach(t,function(e,r){"content-type"===r.toLowerCase()&&(t["Content-Type"]=e)}),n.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:n.merge(i),post:n.merge(i),put:n.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},function(e,t){"use strict";function r(e){return"[object Array]"===g.call(e)}function n(e){return"[object ArrayBuffer]"===g.call(e)}function o(e){return"[object FormData]"===g.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 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 c(e){return"[object Date]"===g.call(e)}function p(e){return"[object File]"===g.call(e)}function l(e){return"[object Blob]"===g.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function h(){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||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function y(){function e(e,r){"object"==typeof t[r]&&"object"==typeof e?t[r]=y(t[r],e):t[r]=e}for(var t={},r=0,n=arguments.length;n>r;r++)m(arguments[r],e);return t}var g=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:n,isFormData:o,isArrayBufferView:i,isString:a,isNumber:u,isObject:f,isUndefined:s,isDate:c,isFile:p,isBlob:l,isStandardBrowserEnv:h,forEach:m,merge:y,trim:d}},function(e,t,r){(function(t){"use strict";e.exports=function(e){return new Promise(function(n,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=r(8):"undefined"!=typeof t&&(i=r(8)),"function"==typeof i&&i(n,o,e)}catch(e){o(e)}})}}).call(t,r(7))},function(e,t){function r(){f=!1,a.length?s=a.concat(s):c=-1,s.length&&n()}function n(){if(!f){var e=setTimeout(r);f=!0;for(var t=s.length;t;){for(a=s,s=[];++c1)for(var r=1;r=200&&o.status<300||!("status"in l)&&o.responseText?e:t)(o),l=null}},l.onerror=function(){t(new Error("Network Error")),l=null},n.isStandardBrowserEnv()){var m=r(14),y=f.withCredentials||u(f.url)?m.read(f.xsrfCookieName):void 0;y&&(p[f.xsrfHeaderName]=y)}if("setRequestHeader"in l&&n.forEach(p,function(e,t){"undefined"==typeof c&&"content-type"===t.toLowerCase()?delete p[t]:l.setRequestHeader(t,e)}),f.withCredentials&&(l.withCredentials=!0),f.responseType)try{l.responseType=f.responseType}catch(e){if("json"!==l.responseType)throw e}n.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},function(e,t,r){"use strict";function n(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 o=r(5);e.exports=function(e,t,r){if(!t)return e;var i;if(r)i=r(t);else{var a=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),a.push(n(t)+"="+n(e))}))}),i=a.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},function(e,t,r){"use strict";var n=r(5);e.exports=function(e){var t,r,o,i={};return e?(n.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=n.trim(e.substr(0,o)).toLowerCase(),r=n.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+r:r)}),i):i}},function(e,t,r){"use strict";var n=r(5);e.exports=function(e,t,r){return n.forEach(r,function(r){e=r(e,t)}),e}},function(e,t,r){"use strict";var n=r(5);e.exports=n.isStandardBrowserEnv()?function(){function e(e){var t=e;return r&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,r=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(r){var o=n.isString(r)?e(r):r;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function r(e){this.message=e}function n(e){for(var t,n,i=String(e),a="",u=0,s=o;i.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&t>>8-u%1*8)){if(n=i.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return a}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=n},function(e,t,r){"use strict";var n=r(5);e.exports=n.isStandardBrowserEnv()?function(){return{write:function(e,t,r,o,i,a){var u=[];u.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&u.push("expires="+new Date(r).toGMTString()),n.isString(o)&&u.push("path="+o),n.isString(i)&&u.push("domain="+i),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,r){"use strict";function n(){this.handlers=[]}var o=r(5);n.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},n.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},n.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=n},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 r=new Array(arguments.length),n=0;n +# The email address is not required for organizations. +InternalFX +Jason Dobry +Josh Drake +RobertHerhold +Tomás Fox diff --git a/fetch/CONTRIBUTORS b/fetch/CONTRIBUTORS new file mode 100644 index 0000000..a5c9494 --- /dev/null +++ b/fetch/CONTRIBUTORS @@ -0,0 +1,11 @@ +# People who have contributed to the js-data-http project. +# +# This file is controlled by scripts/authors.js +# +# Names should be added to this file as: +# [commit count] Name + 1 InternalFX + 66 Jason Dobry + 1 Josh Drake + 1 RobertHerhold + 3 Tomás Fox diff --git a/fetch/dist/js-data-fetch.js b/fetch/dist/js-data-fetch.js index 2cf573d..73daaf6 100644 --- a/fetch/dist/js-data-fetch.js +++ b/fetch/dist/js-data-fetch.js @@ -1,12 +1,3 @@ -/*! -* js-data-fetch -* @version 3.0.0-alpha.4 - Homepage -* @author Jason Dobry -* @copyright (c) 2014-2016 Jason Dobry -* @license MIT -* -* @overview Fetch 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"), require("undefined")); @@ -69,6 +60,8 @@ return /******/ (function(modules) { // webpackBootstrap var _jsData = __webpack_require__(1); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /* global fetch:true Headers:true Request:true */ var axios = __webpack_require__(2); var _ = _jsData.utils._; @@ -941,54 +934,61 @@ return /******/ (function(modules) { // webpackBootstrap * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var _this = this; - + var self = this; opts || (opts = {}); opts.params || (opts.params = {}); - var item = undefined; - var parentKey = mapper.parentKey; var endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint; - var parentField = mapper.parentField; - var parentDef = mapper.parent ? mapper.getResource(mapper.parent) : undefined; - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { + var parents = mapper.parents || (mapper.parent ? _defineProperty({}, mapper.parent, { + key: mapper.parentKey, + field: mapper.parentField + }) : {}); + + forOwn(parents, function (parent, parentName) { + var item = undefined; + var parentKey = parent.key; + var parentField = parent.field; + var parentDef = mapper.getResource(parentName); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { delete opts.params[parentKey]; - } - return endpoint; - } else { - delete opts.params[parentKey]; - if (isString(id) || isNumber(id)) { - item = mapper.get(id); - } else if (isObject(id)) { - item = id; - } + if (isString(id) || isNumber(id)) { + item = mapper.get(id); + } else if (isObject(id)) { + item = id; + } - if (item) { - parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); - } + if (item) { + parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); + } - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - forOwn(opts, function (value, key) { - _opts[key] = value; - }); - _(_opts, parentDef); - return { - v: makePath(_this.getEndpoint(parentDef, parentId, _opts, parentId, endpoint)) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } else { - return endpoint; + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _(_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; }, @@ -1519,12 +1519,12 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ HttpAdapter.version = { - full: '3.0.0-alpha.4', - major: parseInt('3', 10), - minor: parseInt('0', 10), - patch: parseInt('0', 10), - alpha: true ? '4' : false, - beta: true ? 'false' : false + full: '<%= pkg.version %>', + major: parseInt('<%= major %>', 10), + minor: parseInt('<%= minor %>', 10), + patch: parseInt('<%= patch %>', 10), + alpha: true ? '<%= alpha %>' : false, + beta: true ? '<%= beta %>' : false }; /** diff --git a/fetch/dist/js-data-fetch.js.map b/fetch/dist/js-data-fetch.js.map index ff236b8..a541cf8 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 bc8063d879530419e301","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///external \"undefined\""],"names":[],"mappings":"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","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[\"HttpAdapter\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"HttpAdapter\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) {\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 bc8063d879530419e301\n **/","/* global fetch:true Headers:true Request:true */\nconst axios = require('axios')\nimport {utils} from 'js-data'\nconst {\n _,\n addHiddenPropsToTarget,\n copy,\n deepMixIn,\n extend,\n fillIn,\n forOwn,\n isArray,\n isFunction,\n isNumber,\n isObject,\n isSorN,\n isString,\n isUndefined,\n resolve,\n reject,\n toJson\n} = utils\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 forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!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 (isObject(v)) {\n v = 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 noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n}\n\nconst noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\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#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\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 * @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\n // Default values for arguments\n opts || (opts = {})\n\n fillIn(self, opts)\n fillIn(self, DEFAULTS)\n}\n\naddHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreate: noop2,\n\n /**\n * @name HttpAdapter#afterCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreateMany: noop2,\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#afterDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroy: noop2,\n\n /**\n * @name HttpAdapter#afterDestroyAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroyAll: noop2,\n\n /**\n * @name HttpAdapter#afterFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFind: noop2,\n\n /**\n * @name HttpAdapter#afterFindAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFindAll: 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#afterUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdate: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateAll: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateMany: noop2,\n\n /**\n * @name HttpAdapter#beforeCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n */\n beforeCreate: noop,\n\n /**\n * @name HttpAdapter#beforeCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeCreateMany: noop,\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#beforeDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeDestroy: noop,\n\n /**\n * @name HttpAdapter#beforeDestroyAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeDestroyAll: noop,\n\n /**\n * @name HttpAdapter#beforeFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeFind: noop,\n\n /**\n * @name HttpAdapter#beforeFindAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeFindAll: 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 /**\n * @name HttpAdapter#beforeUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n */\n beforeUpdate: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n */\n beforeUpdateAll: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeUpdateMany: noop,\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts)).then(function () {\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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} 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 createMany (mapper, records, opts) {\n const self = this\n let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'createMany'\n self.dbg(op, mapper, records, opts)\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n },\n\n /**\n * Call {@link HttpAdapter#log} at the \"debug\" level.\n *\n * @name HttpAdapter#dbg\n * @method\n * @param {...*} [args] Args passed to {@link HttpAdapter#log}.\n */\n dbg (...args) {\n this.log('debug', ...args)\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (opts.raw) {\n return response\n }\n return response ? ('data' in response ? response.data : response) : 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 = 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 opts || (opts = {})\n opts.params || (opts.params = {})\n\n let item\n const parentKey = mapper.parentKey\n const endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint\n let parentField = mapper.parentField\n const parentDef = mapper.parent ? mapper.getResource(mapper.parent) : undefined\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 endpoint\n } else {\n delete opts.params[parentKey]\n\n if (isString(id) || isNumber(id)) {\n item = mapper.get(id)\n } else if (isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n _(_opts, parentDef)\n return makePath(this.getEndpoint(parentDef, parentId, _opts, parentId, endpoint))\n } else {\n return endpoint\n }\n }\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 opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (isString(id) || 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 /**\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 config = copy(config)\n config = deepMixIn(config, self.httpConfig)\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 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 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * Log the provided arguments at the specified leve.\n *\n * @name HttpAdapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} [args] Arguments 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()}: (HttpAdapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (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 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 (isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts)).then(function () {\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts)).then(function () {\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.addAction = function (name, opts) {\n if (!name || !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 reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n 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, isSorN(id) ? id : null, _opts)\n ]\n if (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 deepMixIn(config)(_opts)\n return 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 HttpAdapter.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 */\nHttpAdapter.addActions = function (opts) {\n opts || (opts = {})\n return function (mapper) {\n forOwn(mapper, function (value, key) {\n HttpAdapter.addAction(key, value)(mapper)\n })\n return mapper\n }\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 = extend\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\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\nmodule.exports = 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 **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 2\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 6a0cad296f52ac5fdd5c","webpack:///./src/index.js","webpack:///external {\"amd\":\"js-data\",\"commonjs\":\"js-data\",\"commonjs2\":\"js-data\",\"root\":\"JSData\"}","webpack:///external \"undefined\""],"names":[],"mappings":"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","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[\"HttpAdapter\"] = factory(require(\"js-data\"), require(\"undefined\"));\n\telse\n\t\troot[\"HttpAdapter\"] = factory(root[\"JSData\"], root[\"undefined\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) {\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 6a0cad296f52ac5fdd5c\n **/","/* global fetch:true Headers:true Request:true */\nconst axios = require('axios')\nimport {utils} from 'js-data'\nconst {\n _,\n addHiddenPropsToTarget,\n copy,\n deepMixIn,\n extend,\n fillIn,\n forOwn,\n isArray,\n isFunction,\n isNumber,\n isObject,\n isSorN,\n isString,\n isUndefined,\n resolve,\n reject,\n toJson\n} = utils\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 forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!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 (isObject(v)) {\n v = 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 noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n}\n\nconst noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\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#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\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 * @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\n // Default values for arguments\n opts || (opts = {})\n\n fillIn(self, opts)\n fillIn(self, DEFAULTS)\n}\n\naddHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreate: noop2,\n\n /**\n * @name HttpAdapter#afterCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreateMany: noop2,\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#afterDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroy: noop2,\n\n /**\n * @name HttpAdapter#afterDestroyAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroyAll: noop2,\n\n /**\n * @name HttpAdapter#afterFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFind: noop2,\n\n /**\n * @name HttpAdapter#afterFindAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFindAll: 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#afterUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdate: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateAll: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateMany: noop2,\n\n /**\n * @name HttpAdapter#beforeCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n */\n beforeCreate: noop,\n\n /**\n * @name HttpAdapter#beforeCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeCreateMany: noop,\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#beforeDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeDestroy: noop,\n\n /**\n * @name HttpAdapter#beforeDestroyAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeDestroyAll: noop,\n\n /**\n * @name HttpAdapter#beforeFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeFind: noop,\n\n /**\n * @name HttpAdapter#beforeFindAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeFindAll: 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 /**\n * @name HttpAdapter#beforeUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n */\n beforeUpdate: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n */\n beforeUpdateAll: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeUpdateMany: noop,\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts)).then(function () {\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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} 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 createMany (mapper, records, opts) {\n const self = this\n let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'createMany'\n self.dbg(op, mapper, records, opts)\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n },\n\n /**\n * Call {@link HttpAdapter#log} at the \"debug\" level.\n *\n * @name HttpAdapter#dbg\n * @method\n * @param {...*} [args] Args passed to {@link HttpAdapter#log}.\n */\n dbg (...args) {\n this.log('debug', ...args)\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (opts.raw) {\n return response\n }\n return response ? ('data' in response ? response.data : response) : 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 = 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 || (opts.params = {})\n\n let endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint\n let parents = mapper.parents || (mapper.parent ? {\n [mapper.parent]: {\n key: mapper.parentKey,\n field: mapper.parentField\n }\n } : {})\n\n forOwn(parents, function (parent, parentName) {\n let item\n let parentKey = parent.key\n let parentField = parent.field\n let parentDef = mapper.getResource(parentName)\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 (isString(id) || isNumber(id)) {\n item = mapper.get(id)\n } else if (isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n _(_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 opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (isString(id) || 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 /**\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 config = copy(config)\n config = deepMixIn(config, self.httpConfig)\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 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 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * Log the provided arguments at the specified leve.\n *\n * @name HttpAdapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} [args] Arguments 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()}: (HttpAdapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (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 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 (isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts)).then(function () {\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts)).then(function () {\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.addAction = function (name, opts) {\n if (!name || !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 reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n 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, isSorN(id) ? id : null, _opts)\n ]\n if (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 deepMixIn(config)(_opts)\n return 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 HttpAdapter.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 */\nHttpAdapter.addActions = function (opts) {\n opts || (opts = {})\n return function (mapper) {\n forOwn(mapper, function (value, key) {\n HttpAdapter.addAction(key, value)(mapper)\n })\n return mapper\n }\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 = extend\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\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\nmodule.exports = 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 **/","module.exports = undefined;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"undefined\"\n ** module id = 2\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 4e50c8d..522fb7f 100644 --- a/fetch/dist/js-data-fetch.min.js +++ b/fetch/dist/js-data-fetch.min.js @@ -1,11 +1,2 @@ -/*! -* js-data-fetch -* @version 3.0.0-alpha.4 - Homepage -* @author Jason Dobry -* @copyright (c) 2014-2016 Jason Dobry -* @license MIT -* -* @overview Fetch HTTP (XHR) adapter for js-data in the browser. -*/ -!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.HttpAdapter=t(require("js-data"),require("undefined")):e.HttpAdapter=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e){return null!=e&&""!==e}function o(e,t){return t||(t=""),e.filter(n).join(t)}function a(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];var n=o(t,"/");return n.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 i(e,t){if(!t)return e;var r=[];return b(t,function(e,t){null!==e&&"undefined"!=typeof e&&(v(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():P(e)&&(e=D(e)),r.push(u(t)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function f(e){var t=this;e||(e={}),y(t,e),y(t,j)}var s="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},p=r(1),d=r(2),l=p.utils._,c=p.utils.addHiddenPropsToTarget,h=p.utils.copy,m=p.utils.deepMixIn,g=p.utils.extend,y=p.utils.fillIn,b=p.utils.forOwn,v=p.utils.isArray,T=p.utils.isFunction,x=p.utils.isNumber,P=p.utils.isObject,A=p.utils.isSorN,E=p.utils.isString,U=p.utils.isUndefined,z=p.utils.resolve,q=p.utils.reject,D=p.utils.toJson,S=!1;try{S=window&&window.fetch}catch(e){}var w=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-1];e.dbg.apply(e,[o.op].concat(r))},C=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-2];e.dbg.apply(e,[o.op].concat(r))},j={basePath:"",debug:!1,forceTrailingSlash:!1,http:d,httpConfig:{},suffix:"",useFetch:!1};c(f.prototype,{afterCreate:C,afterCreateMany:C,afterDEL:C,afterDestroy:C,afterDestroyAll:C,afterFind:C,afterFindAll:C,afterGET:C,afterHTTP:C,afterPOST:C,afterPUT:C,afterUpdate:C,afterUpdateAll:C,afterUpdateMany:C,beforeCreate:w,beforeCreateMany:w,beforeDEL:w,beforeDestroy:w,beforeDestroyAll:w,beforeFind:w,beforeFindAll:w,beforeGET:w,beforeHTTP:w,beforePOST:w,beforePUT:w,beforeUpdate:w,beforeUpdateAll:w,beforeUpdateMany:w,create:function(e,t,r){var n=this,o=void 0;return r=r?h(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreate",z(n[o](e,t,r)).then(function(){return o=r.op="create",n.dbg(o,e,t,r),n.POST(n.getPath("create",e,t,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterCreate",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},createMany:function(e,t,r){var n=this,o=void 0;return r=r?h(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreateMany",z(n[o](e,t,r)).then(function(){return o=r.op="createMany",n.dbg(o,e,t,r),n.POST(n.getPath("createMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterCreateMany",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},dbg:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];this.log.apply(this,["debug"].concat(t))},DEL:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"delete",o=r.op="beforeDEL",z(n[o](e,t,r)).then(function(a){return t=U(a)?t:a,o=r.op="DEL",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(a){return o=r.op="afterDEL",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},deserialize:function(e,t,r){return r||(r={}),T(r.deserialize)?r.deserialize(e,t,r):T(e.deserialize)?e.deserialize(e,t,r):r.raw?t:t&&"data"in t?t.data:t},destroy:function(e,t,r){var n=this,o=void 0;return r=r?h(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroy",z(n[o](e,t,r)).then(function(){return o=r.op="destroy",n.dbg(o,e,t,r),n.DEL(n.getPath("destroy",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterDestroy",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},destroyAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?h(r):{},r.params||(r.params={}),m(r.params,t),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroyAll",z(n.beforeDestroyAll(e,t,r)).then(function(){return o=r.op="destroyAll",n.dbg(o,e,t,r),n.DEL(n.getPath("destroyAll",e,null,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterDestroyAll",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=D(e.data)),fetch(new Request(i(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,r){var n=this,o=void 0;return r=r?h(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeFind",z(n[o](e,t,r)).then(function(){return o=r.op="find",n.dbg(o,e,t,r),n.GET(n.getPath("find",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterFind",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},findAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?h(r):{},r.params||(r.params={}),r.suffix=U(r.suffix)?e.suffix:r.suffix,m(r.params,t),r.params=n.queryTransform(e,r.params,r),o=r.op="beforeFindAll",z(n[o](e,t,r)).then(function(){return o=r.op="findAll",n.dbg(o,e,t,r),n.GET(n.getPath("findAll",e,r.params,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterFindAll",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},GET:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"get",o=r.op="beforeGET",z(n[o](e,t,r)).then(function(a){return t=U(a)?t:a,o=r.op="GET",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(a){return o=r.op="afterGET",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})},getEndpoint:function(e,t,r){var n=this;r||(r={}),r.params||(r.params={});var o=void 0,u=e.parentKey,i=r.hasOwnProperty("endpoint")?r.endpoint:e.endpoint,f=e.parentField,p=e.parent?e.getResource(e.parent):void 0,d=r.params[u];if(d===!1||!u||!p)return d===!1&&delete r.params[u],i;if(delete r.params[u],E(t)||x(t)?o=e.get(t):P(t)&&(o=t),o&&(d=d||o[u]||(o[f]?o[f][p.idAttribute]:null)),!d)return i;var c=function(){delete r.endpoint;var e={};return b(r,function(t,r){e[r]=t}),l(e,p),{v:a(n.getEndpoint(p,d,e,d,i))}}();return"object"===("undefined"==typeof c?"undefined":s(c))?c.v:void 0},getPath:function(e,t,r,n){var o=this;n||(n={});var u=[void 0===n.basePath?void 0===t.basePath?o.basePath:t.basePath:n.basePath,o.getEndpoint(t,E(r)||x(r)||"create"===e?r:null,n)];return("find"===e||"update"===e||"destroy"===e)&&u.push(r),a.apply(p.utils,u)},HTTP:function(e,t){function r(t){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(n.log&&n.dbg("debug",r,t),t):(n.error&&n.error("'FAILED: "+r,t),q(t))}var n=this,o=new Date;t||(t={}),e=h(e),e=m(e,n.httpConfig),n.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var a=e.suffix||t.suffix||n.suffix;if(a&&e.url.substr(e.url.length-a.length)!==a&&(e.url+=a),!n.http)throw new Error("You have not configured this adapter with an http library!");return z(n.beforeHTTP(e,t)).then(function(o){return e=o||e,S&&(n.useFetch||t.useFetch||!n.http)?n.fetch(e,t).then(r,r):n.http(e).then(r,r).catch(function(r){return n.responseError(r,e,t)})}).then(function(r){return z(n.afterHTTP(e,t,r)).then(function(e){return e||r})})},log:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];if(e&&!r.length&&(r.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (HttpAdapter)";if(console[e]){var a;(a=console)[e].apply(a,[o].concat(r))}else{var u;(u=console).log.apply(u,[o].concat(r))}}},POST:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"post",a=n.op="beforePOST",z(o[a](e,t,r,n)).then(function(u){return r=U(u)?r:u,a=n.op="POST",o.dbg(a,e,t,r,n),o.HTTP(r,n)}).then(function(u){return a=n.op="afterPOST",z(o[a](e,t,r,n,u)).then(function(e){return U(e)?u:e})})},PUT:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"put",a=n.op="beforePUT",z(o[a](e,t,r,n)).then(function(u){return r=U(u)?r:u,a=n.op="PUT",o.dbg(a,e,t,r,n),o.HTTP(r,n)}).then(function(u){return a=n.op="afterPUT",z(o[a](e,t,r,n,u)).then(function(e){return U(e)?u:e})})},queryTransform:function(e,t,r){return r||(r={}),T(r.queryTransform)?r.queryTransform(e,t,r):T(e.queryTransform)?e.queryTransform(e,t,r):t},responseError:function(e,t,r){return q(e)},serialize:function(e,t,r){return r||(r={}),T(r.serialize)?r.serialize(e,t,r):T(e.serialize)?e.serialize(e,t,r):t},update:function(e,t,r,n){var o=this,a=void 0;return n=n?h(n):{},n.params||(n.params={}),n.params=o.queryTransform(e,n.params,n),n.suffix=U(n.suffix)?e.suffix:n.suffix,a=n.op="beforeUpdate",z(o[a](e,t,r,n)).then(function(){return a=n.op="update",o.dbg(a,e,t,r,n),o.PUT(o.getPath("update",e,t,n),o.serialize(e,r,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(u){return a=n.op="afterUpdate",z(o[a](e,t,r,n,u)).then(function(e){return U(e)?u:e})})},updateAll:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n=n?h(n):{},n.params||(n.params={}),m(n.params,r),n.params=o.queryTransform(e,n.params,n),n.suffix=U(n.suffix)?e.suffix:n.suffix,a=n.op="beforeUpdateAll",z(o[a](e,t,r,n)).then(function(){return a=n.op="updateAll",o.dbg(a,e,t,r,n),o.PUT(o.getPath("updateAll",e,null,n),o.serialize(e,t,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(u){return a=n.op="afterUpdateAll",z(o[a](e,t,r,n,u)).then(function(e){return U(e)?u:e})})},updateMany:function(e,t,r){var n=this,o=void 0;return r=r?h(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=U(r.suffix)?e.suffix:r.suffix,o=r.op="beforeUpdateMany",z(n[o](e,t,r)).then(function(){return o=r.op="updateMany",n.dbg(o,e,t,r),n.PUT(n.getPath("updateMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterUpdateMany",z(n[o](e,t,r,a)).then(function(e){return U(e)?a:e})})}}),f.addAction=function(e,t){if(!e||!E(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":s(e)));return function(r){if(r[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 q(e)},r[e]=function(r,n){var o=this;P(r)&&(n=r),n=n||{};var u=o.getAdapter(t.adapter||o.defaultAdapter||"http"),i={};if(y(i,t),!n.hasOwnProperty("endpoint")&&i.endpoint&&(n.endpoint=i.endpoint),"function"==typeof n.getEndpoint)i.url=n.getEndpoint(o,n);else{var f=[n.basePath||o.basePath||u.basePath,u.getEndpoint(o,A(r)?r:null,n)];A(r)&&f.push(r),f.push(t.pathname||e),i.url=a.apply(null,f)}return i.method=i.method||"GET",i.mapper=o.name,m(i)(n),z(i).then(n.request||t.request).then(function(e){return u.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(n.response||t.response,n.responseError||t.responseError)},r}},f.addActions=function(e){return e||(e={}),function(e){return b(e,function(t,r){f.addAction(r,t)(e)}),e}},f.extend=g,f.version={full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"},e.exports=f},function(t,r){t.exports=e},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.HttpAdapter=t(require("js-data"),require("undefined")):e.HttpAdapter=t(e.JSData,e.undefined)}(this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e){return null!=e&&""!==e}function a(e,t){return t||(t=""),e.filter(o).join(t)}function i(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];var n=a(t,"/");return n.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 f(e,t){if(!t)return e;var r=[];return v(t,function(e,t){null!==e&&"undefined"!=typeof e&&(T(e)||(e=[e]),e.forEach(function(e){"[object Date]"===window.toString.call(e)?e=e.toISOString():A(e)&&(e=S(e)),r.push(u(t)+"="+u(e))}))}),r.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+r.join("&")),e}function s(e){var t=this;e||(e={}),b(t,e),b(t,F)}var p="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},d=r(1),l=r(2),c=d.utils._,h=d.utils.addHiddenPropsToTarget,m=d.utils.copy,y=d.utils.deepMixIn,g=d.utils.extend,b=d.utils.fillIn,v=d.utils.forOwn,T=d.utils.isArray,x=d.utils.isFunction,P=d.utils.isNumber,A=d.utils.isObject,E=d.utils.isSorN,U=d.utils.isString,z=d.utils.isUndefined,q=d.utils.resolve,D=d.utils.reject,S=d.utils.toJson,w=!1;try{w=window&&window.fetch}catch(e){}var j=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-1];e.dbg.apply(e,[o.op].concat(r))},C=function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];var o=r[r.length-2];e.dbg.apply(e,[o.op].concat(r))},F={basePath:"",debug:!1,forceTrailingSlash:!1,http:l,httpConfig:{},suffix:"",useFetch:!1};h(s.prototype,{afterCreate:C,afterCreateMany:C,afterDEL:C,afterDestroy:C,afterDestroyAll:C,afterFind:C,afterFindAll:C,afterGET:C,afterHTTP:C,afterPOST:C,afterPUT:C,afterUpdate:C,afterUpdateAll:C,afterUpdateMany:C,beforeCreate:j,beforeCreateMany:j,beforeDEL:j,beforeDestroy:j,beforeDestroyAll:j,beforeFind:j,beforeFindAll:j,beforeGET:j,beforeHTTP:j,beforePOST:j,beforePUT:j,beforeUpdate:j,beforeUpdateAll:j,beforeUpdateMany:j,create:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreate",q(n[o](e,t,r)).then(function(){return o=r.op="create",n.dbg(o,e,t,r),n.POST(n.getPath("create",e,t,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterCreate",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},createMany:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeCreateMany",q(n[o](e,t,r)).then(function(){return o=r.op="createMany",n.dbg(o,e,t,r),n.POST(n.getPath("createMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterCreateMany",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},dbg:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];this.log.apply(this,["debug"].concat(t))},DEL:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"delete",o=r.op="beforeDEL",q(n[o](e,t,r)).then(function(a){return t=z(a)?t:a,o=r.op="DEL",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(a){return o=r.op="afterDEL",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},deserialize:function(e,t,r){return r||(r={}),x(r.deserialize)?r.deserialize(e,t,r):x(e.deserialize)?e.deserialize(e,t,r):r.raw?t:t&&"data"in t?t.data:t},destroy:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroy",q(n[o](e,t,r)).then(function(){return o=r.op="destroy",n.dbg(o,e,t,r),n.DEL(n.getPath("destroy",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterDestroy",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},destroyAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?m(r):{},r.params||(r.params={}),y(r.params,t),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeDestroyAll",q(n.beforeDestroyAll(e,t,r)).then(function(){return o=r.op="destroyAll",n.dbg(o,e,t,r),n.DEL(n.getPath("destroyAll",e,null,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterDestroyAll",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},error:function(){if(console){var e;(e=console)["function"==typeof console.error?"error":"log"].apply(e,arguments)}},fetch:function(e){function t(t,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){var r={method:e.method,headers:new Headers(e.headers)};return e.data&&(r.body=S(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,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeFind",q(n[o](e,t,r)).then(function(){return o=r.op="find",n.dbg(o,e,t,r),n.GET(n.getPath("find",e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterFind",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},findAll:function(e,t,r){var n=this,o=void 0;return t||(t={}),r=r?m(r):{},r.params||(r.params={}),r.suffix=z(r.suffix)?e.suffix:r.suffix,y(r.params,t),r.params=n.queryTransform(e,r.params,r),o=r.op="beforeFindAll",q(n[o](e,t,r)).then(function(){return o=r.op="findAll",n.dbg(o,e,t,r),n.GET(n.getPath("findAll",e,r.params,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterFindAll",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},GET:function(e,t,r){var n=this,o=void 0;return t||(t={}),r||(r={}),t.url=e||t.url,t.method=t.method||"get",o=r.op="beforeGET",q(n[o](e,t,r)).then(function(a){return t=z(a)?t:a,o=r.op="GET",n.dbg(o,e,t,r),n.HTTP(t,r)}).then(function(a){return o=r.op="afterGET",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})},getEndpoint:function(e,t,r){var o=this;r||(r={}),r.params||(r.params={});var a=r.hasOwnProperty("endpoint")?r.endpoint:e.endpoint,u=e.parents||(e.parent?n({},e.parent,{key:e.parentKey,field:e.parentField}):{});return v(u,function(n,u){var f=void 0,s=n.key,d=n.field,l=e.getResource(u),h=r.params[s];if(h===!1||!s||!l)return h===!1&&delete r.params[s],!1;if(delete r.params[s],U(t)||P(t)?f=e.get(t):A(t)&&(f=t),f&&(h=h||f[s]||(f[d]?f[d][l.idAttribute]:null)),h){var m=function(){delete r.endpoint;var e={};return v(r,function(t,r){e[r]=t}),c(e,l),a=i(o.getEndpoint(l,h,e,h,a)),{v:!1}}();if("object"===("undefined"==typeof m?"undefined":p(m)))return m.v}}),a},getPath:function(e,t,r,n){var o=this;n||(n={});var a=[void 0===n.basePath?void 0===t.basePath?o.basePath:t.basePath:n.basePath,o.getEndpoint(t,U(r)||P(r)||"create"===e?r:null,n)];return"find"!==e&&"update"!==e&&"destroy"!==e||a.push(r),i.apply(d.utils,a)},HTTP:function(e,t){function r(t){var r=o.toUTCString()+" - "+e.method.toUpperCase()+" "+e.url+" - "+t.status+" "+((new Date).getTime()-o.getTime())+"ms";return t.status>=200&&t.status<300?(n.log&&n.dbg("debug",r,t),t):(n.error&&n.error("'FAILED: "+r,t),D(t))}var n=this,o=new Date;t||(t={}),e=m(e),e=y(e,n.httpConfig),n.forceTrailingSlash&&"/"!==e.url[e.url.length-1]&&(e.url+="/"),e.method=e.method.toUpperCase();var a=e.suffix||t.suffix||n.suffix;if(a&&e.url.substr(e.url.length-a.length)!==a&&(e.url+=a),!n.http)throw new Error("You have not configured this adapter with an http library!");return q(n.beforeHTTP(e,t)).then(function(o){return e=o||e,w&&(n.useFetch||t.useFetch||!n.http)?n.fetch(e,t).then(r,r):n.http(e).then(r,r).catch(function(r){return n.responseError(r,e,t)})}).then(function(r){return q(n.afterHTTP(e,t,r)).then(function(e){return e||r})})},log:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];if(e&&!r.length&&(r.push(e),e="debug"),"debug"!==e||this.debug){var o=e.toUpperCase()+": (HttpAdapter)";if(console[e]){var a;(a=console)[e].apply(a,[o].concat(r))}else{var i;(i=console).log.apply(i,[o].concat(r))}}},POST:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"post",a=n.op="beforePOST",q(o[a](e,t,r,n)).then(function(i){return r=z(i)?r:i,a=n.op="POST",o.dbg(a,e,t,r,n),o.HTTP(r,n)}).then(function(i){return a=n.op="afterPOST",q(o[a](e,t,r,n,i)).then(function(e){return z(e)?i:e})})},PUT:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n||(n={}),r.url=e||r.url,r.data=t||r.data,r.method=r.method||"put",a=n.op="beforePUT",q(o[a](e,t,r,n)).then(function(i){return r=z(i)?r:i,a=n.op="PUT",o.dbg(a,e,t,r,n),o.HTTP(r,n)}).then(function(i){return a=n.op="afterPUT",q(o[a](e,t,r,n,i)).then(function(e){return z(e)?i:e})})},queryTransform:function(e,t,r){return r||(r={}),x(r.queryTransform)?r.queryTransform(e,t,r):x(e.queryTransform)?e.queryTransform(e,t,r):t},responseError:function(e,t,r){return D(e)},serialize:function(e,t,r){return r||(r={}),x(r.serialize)?r.serialize(e,t,r):x(e.serialize)?e.serialize(e,t,r):t},update:function(e,t,r,n){var o=this,a=void 0;return n=n?m(n):{},n.params||(n.params={}),n.params=o.queryTransform(e,n.params,n),n.suffix=z(n.suffix)?e.suffix:n.suffix,a=n.op="beforeUpdate",q(o[a](e,t,r,n)).then(function(){return a=n.op="update",o.dbg(a,e,t,r,n),o.PUT(o.getPath("update",e,t,n),o.serialize(e,r,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(i){return a=n.op="afterUpdate",q(o[a](e,t,r,n,i)).then(function(e){return z(e)?i:e})})},updateAll:function(e,t,r,n){var o=this,a=void 0;return r||(r={}),n=n?m(n):{},n.params||(n.params={}),y(n.params,r),n.params=o.queryTransform(e,n.params,n),n.suffix=z(n.suffix)?e.suffix:n.suffix,a=n.op="beforeUpdateAll",q(o[a](e,t,r,n)).then(function(){return a=n.op="updateAll",o.dbg(a,e,t,r,n),o.PUT(o.getPath("updateAll",e,null,n),o.serialize(e,t,n),n)}).then(function(t){return o.deserialize(e,t,n)}).then(function(i){return a=n.op="afterUpdateAll",q(o[a](e,t,r,n,i)).then(function(e){return z(e)?i:e})})},updateMany:function(e,t,r){var n=this,o=void 0;return r=r?m(r):{},r.params||(r.params={}),r.params=n.queryTransform(e,r.params,r),r.suffix=z(r.suffix)?e.suffix:r.suffix,o=r.op="beforeUpdateMany",q(n[o](e,t,r)).then(function(){return o=r.op="updateMany",n.dbg(o,e,t,r),n.PUT(n.getPath("updateMany",e,null,r),n.serialize(e,t,r),r)}).then(function(t){return n.deserialize(e,t,r)}).then(function(a){return o=r.op="afterUpdateMany",q(n[o](e,t,r,a)).then(function(e){return z(e)?a:e})})}}),s.addAction=function(e,t){if(!e||!U(e))throw new TypeError("action(name[, opts]): Expected: string, Found: "+("undefined"==typeof e?"undefined":p(e)));return function(r){if(r[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 D(e)},r[e]=function(r,n){var o=this;A(r)&&(n=r),n=n||{};var a=o.getAdapter(t.adapter||o.defaultAdapter||"http"),u={};if(b(u,t),!n.hasOwnProperty("endpoint")&&u.endpoint&&(n.endpoint=u.endpoint),"function"==typeof n.getEndpoint)u.url=n.getEndpoint(o,n);else{var f=[n.basePath||o.basePath||a.basePath,a.getEndpoint(o,E(r)?r:null,n)];E(r)&&f.push(r),f.push(t.pathname||e),u.url=i.apply(null,f)}return u.method=u.method||"GET",u.mapper=o.name,y(u)(n),q(u).then(n.request||t.request).then(function(e){return a.HTTP(e)}).then(function(e){return e&&e.config&&(e.config.mapper=o.name),e}).then(n.response||t.response,n.responseError||t.responseError)},r}},s.addActions=function(e){return e||(e={}),function(e){return v(e,function(t,r){s.addAction(r,t)(e)}),e}},s.extend=g,s.version={full:"<%= pkg.version %>",major:parseInt("<%= major %>",10),minor:parseInt("<%= minor %>",10),patch:parseInt("<%= patch %>",10),alpha:"<%= alpha %>",beta:"<%= beta %>"},e.exports=s},function(t,r){t.exports=e},function(e,t){e.exports=void 0}])}); //# sourceMappingURL=fetch/dist/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 b6db9a9..77c2f3f 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_2__","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","forOwn","key","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_typeof","Symbol","iterator","obj","constructor","_jsData","axios","_","utils","addHiddenPropsToTarget","copy","deepMixIn","extend","isFunction","isNumber","isSorN","isString","isUndefined","resolve","reject","hasFetch","fetch","e","noop","_len2","_key2","dbg","apply","op","concat","noop2","_len3","_key3","basePath","debug","forceTrailingSlash","http","httpConfig","suffix","useFetch","prototype","afterCreate","afterCreateMany","afterDEL","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterGET","afterHTTP","afterPOST","afterPUT","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCreate","beforeCreateMany","beforeDEL","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeGET","beforeHTTP","beforePOST","beforePUT","beforeUpdate","beforeUpdateAll","beforeUpdateMany","create","mapper","props","undefined","queryTransform","then","POST","getPath","serialize","response","deserialize","data","_data","createMany","records","_len4","_key4","log","DEL","config","method","_config","HTTP","_response","raw","destroy","destroyAll","query","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","GET","findAll","getEndpoint","_this","item","parentKey","endpoint","hasOwnProperty","parentField","parentDef","parent","getResource","parentId","get","idAttribute","_ret","_opts","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","substr","Error","catch","err","responseError","level","_len5","_key5","prefix","_console2","_console3","PUT","update","updateAll","updateMany","addAction","name","TypeError","request","adapter","getAdapter","defaultAdapter","_args","pathname","addActions","version","full","major","parseInt","minor","patch","alpha","beta"],"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_2__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","isValidString","join","items","separator","filter","makePath","_len","arguments","length","args","Array","_key","result","replace","encode","val","encodeURIComponent","buildUrl","url","params","parts","forOwn","isArray","forEach","v","window","toString","toISOString","isObject","toJson","push","indexOf","HttpAdapter","opts","self","fillIn","DEFAULTS","_typeof","Symbol","iterator","constructor","_jsData","axios","_","utils","addHiddenPropsToTarget","copy","deepMixIn","extend","isFunction","isNumber","isSorN","isString","isUndefined","resolve","reject","hasFetch","fetch","e","noop","_len2","_key2","dbg","apply","op","concat","noop2","_len3","_key3","basePath","debug","forceTrailingSlash","http","httpConfig","suffix","useFetch","prototype","afterCreate","afterCreateMany","afterDEL","afterDestroy","afterDestroyAll","afterFind","afterFindAll","afterGET","afterHTTP","afterPOST","afterPUT","afterUpdate","afterUpdateAll","afterUpdateMany","beforeCreate","beforeCreateMany","beforeDEL","beforeDestroy","beforeDestroyAll","beforeFind","beforeFindAll","beforeGET","beforeHTTP","beforePOST","beforePUT","beforeUpdate","beforeUpdateAll","beforeUpdateMany","create","mapper","props","undefined","queryTransform","then","POST","getPath","serialize","response","deserialize","data","_data","createMany","records","_len4","_key4","log","DEL","config","method","_config","HTTP","_response","raw","destroy","destroyAll","query","error","console","_console","_fetch","_x","_x2","requestConfig","headers","Headers","body","Request","json","find","GET","findAll","getEndpoint","endpoint","hasOwnProperty","parents","parent","parentKey","field","parentField","parentName","item","parentDef","getResource","parentId","get","idAttribute","_ret","_opts","logResponse","str","start","toUTCString","toUpperCase","status","Date","getTime","substr","Error","catch","err","responseError","level","_len5","_key5","prefix","_console2","_console3","PUT","update","updateAll","updateMany","addAction","name","TypeError","request","adapter","getAdapter","defaultAdapter","_args","pathname","addActions","version","full","major","parseInt","minor","patch","alpha","beta"],"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 2c801d6..dc22fbc 100644 --- a/fetch/package.json +++ b/fetch/package.json @@ -1,13 +1,13 @@ { "name": "js-data-fetch", - "description": "HTTP adapter for js-data that uses fetch.", - "version": "3.0.0-alpha.4", + "description": "HTTP adapter for js-data that uses the fetch API.", + "version": "3.0.0-alpha.5", "homepage": "https://github.com/js-data/js-data-http", "repository": { "type": "git", "url": "https://github.com/js-data/js-data-http.git" }, - "author": "Jason Dobry (http://www.pseudobry.com)", + "author": "js-data-http project authors", "license": "MIT", "main": "./dist/js-data-fetch.js", "keywords": [ diff --git a/karma.conf.js b/karma.conf.js index fe43a56..5d2ad5e 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,83 +1,42 @@ var customLaunchers = { - bs_ie9_windows7: { - base: 'BrowserStack', - browser: 'ie', - browser_version: '9.0', - os: 'Windows', - os_version: '7' - } -}; + bs_ie9_windows7: { + base: 'BrowserStack', + browser: 'ie', + browser_version: '9.0', + os: 'Windows', + os_version: '7' + }, + bs_safari7_osxmavericks: { + base: 'BrowserStack', + browser: 'safari', + browser_version: '7.1', + os: 'OS X', + os_version: 'Mavericks' + }, + bs_firefox41_windows7: { + base: 'BrowserStack', + browser: 'firefox', + browser_version: '41.0', + os: 'Windows', + os_version: '7' + }, + bs_chrome46_windows7: { + base: 'BrowserStack', + browser: 'chrome', + browser_version: '46.0', + os: 'Windows', + os_version: '7' + } +} -var browsers = ['PhantomJS']; +var browsers = ['PhantomJS'] if ( - process.env.BROWSERSTACK_USERNAME && - process.env.BROWSERSTACK_ACCESS_KEY + process.env.BROWSERSTACK_USERNAME && + process.env.BROWSERSTACK_ACCESS_KEY ) { - browsers = browsers.concat(Object.keys(customLaunchers)); + browsers = browsers.concat(Object.keys(customLaunchers)) } -module.exports = function (config) { - config.set({ - // base path, that will be used to resolve files and exclude - basePath: './', - frameworks: ['sinon', 'chai', 'mocha'], - plugins: [ - // these plugins will be require() by Karma - 'karma-sinon', - 'karma-mocha', - 'karma-chai', - 'karma-chrome-launcher', - 'karma-phantomjs-launcher', - 'karma-firefox-launcher', - 'karma-coverage', - 'karma-browserstack-launcher', - 'karma-junit-reporter' - ], - autoWatch: false, - autoWatchBatchDelay: 4000, - browsers: browsers, - - // list of files / patterns to load in the browser - files: [ - 'node_modules/es6-promise/dist/es6-promise.js', - 'node_modules/js-data/dist/js-data.js', - 'dist/js-data-http.js', - 'karma.start.js', - 'test/browser/**/*.js' - ], - - reporters: ['dots', 'coverage', 'junit'], - - preprocessors: { - 'dist/js-data-http.js': ['coverage'] - }, - - // optionally, configure the reporter - coverageReporter: { - type: 'lcov', - dir: 'coverage/' - }, - - // the default configuration - junitReporter: { - outputDir: process.env.CIRCLE_TEST_REPORTS || 'junit', - outputFile: undefined, - suite: 'js-data-http', - useBrowserName: false - }, - - browserStack: { - username: process.env.BROWSERSTACK_USERNAME, - accessKey: process.env.BROWSERSTACK_ACCESS_KEY - }, - - customLaunchers: customLaunchers, - - browserNoActivityTimeout: 30000, - - // web server port - port: 9876, - module.exports = function (config) { config.set({ basePath: './', diff --git a/node/AUTHORS b/node/AUTHORS new file mode 100644 index 0000000..370b7c6 --- /dev/null +++ b/node/AUTHORS @@ -0,0 +1,12 @@ +# This is the official list of js-data-http project authors. +# +# This file is controlled by scripts/authors.js +# +# Names are formatted as: +# # commits Name or Organization +# The email address is not required for organizations. +InternalFX +Jason Dobry +Josh Drake +RobertHerhold +Tomás Fox diff --git a/node/CONTRIBUTORS b/node/CONTRIBUTORS new file mode 100644 index 0000000..a5c9494 --- /dev/null +++ b/node/CONTRIBUTORS @@ -0,0 +1,11 @@ +# People who have contributed to the js-data-http project. +# +# This file is controlled by scripts/authors.js +# +# Names should be added to this file as: +# [commit count] Name + 1 InternalFX + 66 Jason Dobry + 1 Josh Drake + 1 RobertHerhold + 3 Tomás Fox diff --git a/node/dist/js-data-http-node.js b/node/dist/js-data-http-node.js index a642350..5d978f4 100644 --- a/node/dist/js-data-http-node.js +++ b/node/dist/js-data-http-node.js @@ -1,12 +1,3 @@ -/*! -* js-data-http-node -* @version 3.0.0-alpha.4 - Homepage -* @author Jason Dobry -* @copyright (c) 2014-2016 Jason Dobry -* @license MIT -* -* @overview Node.js HTTP adapter for js-data. -*/ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("js-data"), require("axios")); @@ -69,6 +60,8 @@ return /******/ (function(modules) { // webpackBootstrap var _jsData = __webpack_require__(1); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + /* global fetch:true Headers:true Request:true */ var axios = __webpack_require__(2); var _ = _jsData.utils._; @@ -941,54 +934,61 @@ return /******/ (function(modules) { // webpackBootstrap * @return {string} Full path. */ getEndpoint: function getEndpoint(mapper, id, opts) { - var _this = this; - + var self = this; opts || (opts = {}); opts.params || (opts.params = {}); - var item = undefined; - var parentKey = mapper.parentKey; var endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint; - var parentField = mapper.parentField; - var parentDef = mapper.parent ? mapper.getResource(mapper.parent) : undefined; - var parentId = opts.params[parentKey]; - - if (parentId === false || !parentKey || !parentDef) { - if (parentId === false) { + var parents = mapper.parents || (mapper.parent ? _defineProperty({}, mapper.parent, { + key: mapper.parentKey, + field: mapper.parentField + }) : {}); + + forOwn(parents, function (parent, parentName) { + var item = undefined; + var parentKey = parent.key; + var parentField = parent.field; + var parentDef = mapper.getResource(parentName); + var parentId = opts.params[parentKey]; + + if (parentId === false || !parentKey || !parentDef) { + if (parentId === false) { + delete opts.params[parentKey]; + } + return false; + } else { delete opts.params[parentKey]; - } - return endpoint; - } else { - delete opts.params[parentKey]; - if (isString(id) || isNumber(id)) { - item = mapper.get(id); - } else if (isObject(id)) { - item = id; - } + if (isString(id) || isNumber(id)) { + item = mapper.get(id); + } else if (isObject(id)) { + item = id; + } - if (item) { - parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); - } + if (item) { + parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null); + } - if (parentId) { - var _ret = function () { - delete opts.endpoint; - var _opts = {}; - forOwn(opts, function (value, key) { - _opts[key] = value; - }); - _(_opts, parentDef); - return { - v: makePath(_this.getEndpoint(parentDef, parentId, _opts, parentId, endpoint)) - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } else { - return endpoint; + if (parentId) { + var _ret = function () { + delete opts.endpoint; + var _opts = {}; + forOwn(opts, function (value, key) { + _opts[key] = value; + }); + _(_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; }, @@ -1519,12 +1519,12 @@ return /******/ (function(modules) { // webpackBootstrap * otherwise `false` if the current version is not beta. */ HttpAdapter.version = { - full: '3.0.0-alpha.4', - major: parseInt('3', 10), - minor: parseInt('0', 10), - patch: parseInt('0', 10), - alpha: true ? '4' : false, - beta: true ? 'false' : false + full: '<%= pkg.version %>', + major: parseInt('<%= major %>', 10), + minor: parseInt('<%= minor %>', 10), + patch: parseInt('<%= patch %>', 10), + alpha: true ? '<%= alpha %>' : false, + beta: true ? '<%= beta %>' : false }; /** diff --git a/node/dist/js-data-http-node.js.map b/node/dist/js-data-http-node.js.map index ac14657..f8eecda 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 6f49bab2f976606648e0","webpack:///./src/index.js","webpack:///external \"js-data\"","webpack:///external \"axios\""],"names":[],"mappings":"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","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_2__) {\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 6f49bab2f976606648e0\n **/","/* global fetch:true Headers:true Request:true */\nconst axios = require('axios')\nimport {utils} from 'js-data'\nconst {\n _,\n addHiddenPropsToTarget,\n copy,\n deepMixIn,\n extend,\n fillIn,\n forOwn,\n isArray,\n isFunction,\n isNumber,\n isObject,\n isSorN,\n isString,\n isUndefined,\n resolve,\n reject,\n toJson\n} = utils\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 forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!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 (isObject(v)) {\n v = 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 noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n}\n\nconst noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\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#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\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 * @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\n // Default values for arguments\n opts || (opts = {})\n\n fillIn(self, opts)\n fillIn(self, DEFAULTS)\n}\n\naddHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreate: noop2,\n\n /**\n * @name HttpAdapter#afterCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreateMany: noop2,\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#afterDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroy: noop2,\n\n /**\n * @name HttpAdapter#afterDestroyAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroyAll: noop2,\n\n /**\n * @name HttpAdapter#afterFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFind: noop2,\n\n /**\n * @name HttpAdapter#afterFindAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFindAll: 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#afterUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdate: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateAll: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateMany: noop2,\n\n /**\n * @name HttpAdapter#beforeCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n */\n beforeCreate: noop,\n\n /**\n * @name HttpAdapter#beforeCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeCreateMany: noop,\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#beforeDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeDestroy: noop,\n\n /**\n * @name HttpAdapter#beforeDestroyAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeDestroyAll: noop,\n\n /**\n * @name HttpAdapter#beforeFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeFind: noop,\n\n /**\n * @name HttpAdapter#beforeFindAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeFindAll: 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 /**\n * @name HttpAdapter#beforeUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n */\n beforeUpdate: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n */\n beforeUpdateAll: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeUpdateMany: noop,\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts)).then(function () {\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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} 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 createMany (mapper, records, opts) {\n const self = this\n let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'createMany'\n self.dbg(op, mapper, records, opts)\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n },\n\n /**\n * Call {@link HttpAdapter#log} at the \"debug\" level.\n *\n * @name HttpAdapter#dbg\n * @method\n * @param {...*} [args] Args passed to {@link HttpAdapter#log}.\n */\n dbg (...args) {\n this.log('debug', ...args)\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (opts.raw) {\n return response\n }\n return response ? ('data' in response ? response.data : response) : 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 = 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 opts || (opts = {})\n opts.params || (opts.params = {})\n\n let item\n const parentKey = mapper.parentKey\n const endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint\n let parentField = mapper.parentField\n const parentDef = mapper.parent ? mapper.getResource(mapper.parent) : undefined\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 endpoint\n } else {\n delete opts.params[parentKey]\n\n if (isString(id) || isNumber(id)) {\n item = mapper.get(id)\n } else if (isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n _(_opts, parentDef)\n return makePath(this.getEndpoint(parentDef, parentId, _opts, parentId, endpoint))\n } else {\n return endpoint\n }\n }\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 opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (isString(id) || 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 /**\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 config = copy(config)\n config = deepMixIn(config, self.httpConfig)\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 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 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * Log the provided arguments at the specified leve.\n *\n * @name HttpAdapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} [args] Arguments 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()}: (HttpAdapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (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 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 (isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts)).then(function () {\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts)).then(function () {\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.addAction = function (name, opts) {\n if (!name || !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 reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n 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, isSorN(id) ? id : null, _opts)\n ]\n if (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 deepMixIn(config)(_opts)\n return 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 HttpAdapter.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 */\nHttpAdapter.addActions = function (opts) {\n opts || (opts = {})\n return function (mapper) {\n forOwn(mapper, function (value, key) {\n HttpAdapter.addAction(key, value)(mapper)\n })\n return mapper\n }\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 = extend\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\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\nmodule.exports = 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 **/","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 2\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap d36377afc06f51f4e1b6","webpack:///./src/index.js","webpack:///external \"js-data\"","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;;;;;;;;;;;;;;;;ACrCA,KAAM,QAAQ,oBAAQ,CAAR,CAAR;KAGJ;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;;;AAGF,KAAI,WAAW,KAAX;;AAEJ,KAAI;AACF,cAAW,UAAU,OAAO,KAAP,CADnB;EAAJ,CAEE,OAAO,CAAP,EAAU,EAAV;;AAEF,UAAS,aAAT,CAAwB,KAAxB,EAA+B;AAC7B,UAAQ,SAAS,IAAT,IAAiB,UAAU,EAAV,CADI;EAA/B;AAGA,UAAS,IAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,iBAAc,YAAY,EAAZ,CAAd,CAD+B;AAE/B,UAAO,MAAM,MAAN,CAAa,aAAb,EAA4B,IAA5B,CAAiC,SAAjC,CAAP,CAF+B;EAAjC;AAIA,UAAS,QAAT,GAA4B;qCAAN;;IAAM;;AAC1B,OAAI,SAAS,KAAK,IAAL,EAAW,GAAX,CAAT,CADsB;AAE1B,UAAO,OAAO,OAAP,CAAe,mBAAf,EAAoC,KAApC,CAAP,CAF0B;EAA5B;;AAKA,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,CADoB;EAAtB;;AAWA,UAAS,QAAT,CAAmB,GAAnB,EAAwB,MAAxB,EAAgC;AAC9B,OAAI,CAAC,MAAD,EAAS;AACX,YAAO,GAAP,CADW;IAAb;;AAIA,OAAM,QAAQ,EAAR,CALwB;;AAO9B,UAAO,MAAP,EAAe,UAAU,GAAV,EAAe,GAAf,EAAoB;AACjC,SAAI,QAAQ,IAAR,IAAgB,OAAO,GAAP,KAAe,WAAf,EAA4B;AAC9C,cAD8C;MAAhD;AAGA,SAAI,CAAC,QAAQ,GAAR,CAAD,EAAe;AACjB,aAAM,CAAC,GAAD,CAAN,CADiB;MAAnB;;AAIA,SAAI,OAAJ,CAAY,UAAU,CAAV,EAAa;AACvB,WAAI,OAAO,QAAP,CAAgB,IAAhB,CAAqB,CAArB,MAA4B,eAA5B,EAA6C;AAC/C,aAAI,EAAE,WAAF,EAAJ,CAD+C;QAAjD,MAEO,IAAI,SAAS,CAAT,CAAJ,EAAiB;AACtB,aAAI,OAAO,CAAP,CAAJ,CADsB;QAAjB;AAGP,aAAM,IAAN,CAAc,OAAO,GAAP,UAAe,OAAO,CAAP,CAA7B,EANuB;MAAb,CAAZ,CARiC;IAApB,CAAf,CAP8B;;AAyB9B,OAAI,MAAM,MAAN,GAAe,CAAf,EAAkB;AACpB,YAAO,CAAC,IAAI,OAAJ,CAAY,GAAZ,MAAqB,CAAC,CAAD,GAAK,GAA1B,GAAgC,GAAhC,CAAD,GAAwC,MAAM,IAAN,CAAW,GAAX,CAAxC,CADa;IAAtB;;AAIA,UAAO,GAAP,CA7B8B;EAAhC;;AAgCA,KAAM,OAAO,SAAP,IAAO,GAAmB;AAC9B,OAAM,OAAO,IAAP,CADwB;;sCAAN;;IAAM;;AAE9B,OAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAd,CAAZ,CAFwB;AAG9B,QAAK,GAAL,cAAS,KAAK,EAAL,SAAY,KAArB,EAH8B;EAAnB;;AAMb,KAAM,QAAQ,SAAR,KAAQ,GAAmB;AAC/B,OAAM,OAAO,IAAP,CADyB;;sCAAN;;IAAM;;AAE/B,OAAM,OAAO,KAAK,KAAK,MAAL,GAAc,CAAd,CAAZ,CAFyB;AAG/B,QAAK,GAAL,cAAS,KAAK,EAAL,SAAY,KAArB,EAH+B;EAAnB;;AAMd,KAAM,WAAW;;;;;;AAMf,aAAU,EAAV;;;;;;;AAOA,UAAO,KAAP;;;;;;;AAOA,uBAAoB,KAApB;;;;;;AAMA,SAAM,KAAN;;;;;;AAMA,eAAY,EAAZ;;;;;;AAMA,WAAQ,EAAR;;;;;;;AAOA,aAAU,KAAV;EA7CI;;;;;;;;;;;;;;;AA6DN,UAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,OAAM,OAAO,IAAP;;;AADoB,OAI1B,KAAS,OAAO,EAAP,CAAT,CAJ0B;;AAM1B,UAAO,IAAP,EAAa,IAAb,EAN0B;AAO1B,UAAO,IAAP,EAAa,QAAb,EAP0B;EAA5B;;AAUA,wBAAuB,YAAY,SAAZ,EAAuB;;;;;;;;;AAS5C,gBAAa,KAAb;;;;;;;;;;AAUA,oBAAiB,KAAjB;;;;;;;;;;AAUA,aAAU,KAAV;;;;;;;;;;AAUA,iBAAc,KAAd;;;;;;;;;;AAUA,oBAAiB,KAAjB;;;;;;;;;;AAUA,cAAW,KAAX;;;;;;;;;;AAUA,iBAAc,KAAd;;;;;;;;;;AAUA,aAAU,KAAV;;;;;;;;;AASA,cAAW,KAAX;;;;;;;;;;;AAWA,cAAW,KAAX;;;;;;;;;;;AAWA,aAAU,KAAV;;;;;;;;;;;AAWA,gBAAa,KAAb;;;;;;;;;;;AAWA,mBAAgB,KAAhB;;;;;;;;;;AAUA,oBAAiB,KAAjB;;;;;;;;;AASA,iBAAc,IAAd;;;;;;;;;AASA,qBAAkB,IAAlB;;;;;;;;;AASA,cAAW,IAAX;;;;;;;;;AASA,kBAAe,IAAf;;;;;;;;;AASA,qBAAkB,IAAlB;;;;;;;;;AASA,eAAY,IAAZ;;;;;;;;;AASA,kBAAe,IAAf;;;;;;;;;AASA,cAAW,IAAX;;;;;;;;AAQA,eAAY,IAAZ;;;;;;;;;;AAUA,eAAY,IAAZ;;;;;;;;;;AAUA,cAAW,IAAX;;;;;;;;;;AAUA,iBAAc,IAAd;;;;;;;;;;AAUA,oBAAiB,IAAjB;;;;;;;;;AASA,qBAAkB,IAAlB;;;;;;;;;;;;;;AAcA,2BAAQ,QAAQ,OAAO,MAAM;AAC3B,SAAM,OAAO,IAAP,CADqB;AAE3B,SAAI,cAAJ,CAF2B;AAG3B,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAHoB;AAI3B,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJ2B;AAK3B,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CAL2B;AAM3B,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AAN9B,OAS3B,GAAK,KAAK,EAAL,GAAU,cAAV,CATsB;AAU3B,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAR,EAAuC,IAAvC,CAA4C,YAAY;AAC7D,YAAK,KAAK,EAAL,GAAU,QAAV,CADwD;AAE7D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B,EAF6D;AAG7D,cAAO,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,CAAP,CAH6D;MAAZ,CAA5C,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CARD,CAUJ,IAVI,CAUC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,aAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,IAA9B,CAAR,EAA6C,IAA7C,CAAkD,UAAU,KAAV,EAAiB;;AAExE,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFiE;QAAjB,CAAzD,CAHsB;MAAhB,CAVR,CAV2B;IA7Re;;;;;;;;;;;;;;;AAuU5C,mCAAY,QAAQ,SAAS,MAAM;AACjC,SAAM,OAAO,IAAP,CAD2B;AAEjC,SAAI,cAAJ,CAFiC;AAGjC,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAH0B;AAIjC,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJiC;AAKjC,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CALiC;AAMjC,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AANxB,OASjC,GAAK,KAAK,EAAL,GAAU,kBAAV,CAT4B;AAUjC,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,CAAR,EAAyC,IAAzC,CAA8C,YAAY;AAC/D,YAAK,KAAK,EAAL,GAAU,YAAV,CAD0D;AAE/D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,OAArB,EAA8B,IAA9B,EAF+D;AAG/D,cAAO,KAAK,IAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,KAAK,SAAL,CAAe,MAAf,EAAuB,OAAvB,EAAgC,IAAhC,CAFK,EAGL,IAHK,CAAP,CAH+D;MAAZ,CAA9C,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CARD,CAUJ,IAVI,CAUC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,iBAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,IAAhC,CAAR,EAA+C,IAA/C,CAAoD,UAAU,KAAV,EAAiB;;AAE1E,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFmE;QAAjB,CAA3D,CAHsB;MAAhB,CAVR,CAViC;IAvUS;;;;;;;;;;AA4W5C,uBAAc;wCAAN;;MAAM;;AACZ,UAAK,GAAL,cAAS,gBAAY,KAArB,EADY;IA5W8B;;;;;;;;;;;;;;AA2X5C,qBAAK,KAAK,QAAQ,MAAM;AACtB,SAAM,OAAO,IAAP,CADgB;AAEtB,SAAI,cAAJ,CAFsB;AAGtB,gBAAW,SAAS,EAAT,CAAX,CAHsB;AAItB,cAAS,OAAO,EAAP,CAAT,CAJsB;AAKtB,YAAO,GAAP,GAAa,OAAO,OAAO,GAAP,CALE;AAMtB,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,QAAjB;;;AANM,OAStB,GAAK,KAAK,EAAL,GAAU,WAAV,CATiB;AAUtB,YAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAR,EAAqC,IAArC,CAA0C,UAAU,OAAV,EAAmB;;AAElE,gBAAS,YAAY,OAAZ,IAAuB,MAAvB,GAAgC,OAAhC,CAFyD;AAGlE,YAAK,KAAK,EAAL,GAAU,KAAV,CAH6D;AAIlE,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B,EAJkE;AAKlE,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP,CALkE;MAAnB,CAA1C,CAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAV,CAFqB;AAG1B,cAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAR,EAA+C,IAA/C,CAAoD,UAAU,SAAV,EAAqB;;AAE9E,gBAAO,YAAY,SAAZ,IAAyB,QAAzB,GAAoC,SAApC,CAFuE;QAArB,CAA3D,CAH0B;MAApB,CANR,CAVsB;IA3XoB;;;;;;;;;;;;;;AAga5C,qCAAa,QAAQ,UAAU,MAAM;AACnC,cAAS,OAAO,EAAP,CAAT,CADmC;AAEnC,SAAI,WAAW,KAAK,WAAL,CAAf,EAAkC;AAChC,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CADgC;MAAlC;AAGA,SAAI,WAAW,OAAO,WAAP,CAAf,EAAoC;AAClC,cAAO,OAAO,WAAP,CAAmB,MAAnB,EAA2B,QAA3B,EAAqC,IAArC,CAAP,CADkC;MAApC;AAGA,SAAI,KAAK,GAAL,EAAU;AACZ,cAAO,QAAP,CADY;MAAd;AAGA,YAAO,WAAY,UAAU,QAAV,GAAqB,SAAS,IAAT,GAAgB,QAArC,GAAiD,QAA7D,CAX4B;IAhaO;;;;;;;;;;;;;;;AA0b5C,6BAAS,QAAQ,IAAI,MAAM;AACzB,SAAM,OAAO,IAAP,CADmB;AAEzB,SAAI,cAAJ,CAFyB;AAGzB,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAHkB;AAIzB,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJyB;AAKzB,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CALyB;AAMzB,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AANhC,OASzB,GAAK,KAAK,EAAL,GAAU,eAAV,CAToB;AAUzB,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAR,EAAoC,IAApC,CAAyC,YAAY;AAC1D,YAAK,KAAK,EAAL,GAAU,SAAV,CADqD;AAE1D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB,EAF0D;AAG1D,cAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,EAAhC,EAAoC,IAApC,CADK,EAEL,IAFK,CAAP,CAH0D;MAAZ,CAAzC,CAOJ,IAPI,CAOC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CAPD,CASJ,IATI,CASC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,cAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,IAA3B,CAAR,EAA0C,IAA1C,CAA+C,UAAU,KAAV,EAAiB;;AAErE,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAF8D;QAAjB,CAAtD,CAHsB;MAAhB,CATR,CAVyB;IA1biB;;;;;;;;;;;;;;;AAme5C,mCAAY,QAAQ,OAAO,MAAM;AAC/B,SAAM,OAAO,IAAP,CADyB;AAE/B,SAAI,cAAJ,CAF+B;AAG/B,eAAU,QAAQ,EAAR,CAAV,CAH+B;AAI/B,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAJwB;AAK/B,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAL+B;AAM/B,eAAU,KAAK,MAAL,EAAa,KAAvB,EAN+B;AAO/B,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CAP+B;AAQ/B,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AAR1B,OAW/B,GAAK,KAAK,EAAL,GAAU,kBAAV,CAX0B;AAY/B,YAAO,QAAQ,KAAK,gBAAL,CAAsB,MAAtB,EAA8B,KAA9B,EAAqC,IAArC,CAAR,EAAoD,IAApD,CAAyD,YAAY;AAC1E,YAAK,KAAK,EAAL,GAAU,YAAV,CADqE;AAE1E,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B,EAF0E;AAG1E,cAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,YAAb,EAA2B,MAA3B,EAAmC,IAAnC,EAAyC,IAAzC,CADK,EAEL,IAFK,CAAP,CAH0E;MAAZ,CAAzD,CAOJ,IAPI,CAOC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CAPD,CASJ,IATI,CASC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,iBAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,IAA9B,CAAR,EAA6C,IAA7C,CAAkD,UAAU,KAAV,EAAiB;;AAExE,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFiE;QAAjB,CAAzD,CAHsB;MAAhB,CATR,CAZ+B;IAneW;;;;;;;;;;AAygB5C,2BAAgB;AACd,SAAI,OAAJ,EAAa;;;AACX,4BAAQ,OAAO,QAAQ,KAAR,KAAkB,UAAzB,GAAsC,OAAtC,GAAgD,KAAhD,CAAR,4BADW;MAAb;IA1gB0C;;;;;;;;;;;;;;;;AA4hB5C;;;;;;;;;;eAAO,QAAQ,MAAM;AACnB,SAAM,gBAAgB;AACpB,eAAQ,OAAO,MAAP;;AAER,gBAAS,IAAI,OAAJ,CAAY,OAAO,OAAP,CAArB;MAHI,CADa;;AAOnB,SAAI,OAAO,IAAP,EAAa;AACf,qBAAc,IAAd,GAAqB,OAAO,OAAO,IAAP,CAA5B,CADe;MAAjB;;AAIA,YAAO,MAAM,IAAI,OAAJ,CAAY,SAAS,OAAO,GAAP,EAAY,OAAO,MAAP,CAAjC,EAAiD,aAAjD,CAAN,EAAuE,IAAvE,CAA4E,UAAU,QAAV,EAAoB;AACrG,gBAAS,MAAT,GAAkB;AAChB,iBAAQ,OAAO,MAAP;AACR,cAAK,OAAO,GAAP;QAFP,CADqG;AAKrG,cAAO,SAAS,IAAT,GAAgB,IAAhB,CAAqB,UAAU,IAAV,EAAgB;AAC1C,kBAAS,IAAT,GAAgB,IAAhB,CAD0C;AAE1C,gBAAO,QAAP,CAF0C;QAAhB,CAA5B,CALqG;MAApB,CAAnF,CAXmB;KA5hBuB;;;;;;;;;;;;;;;AA+jB5C,uBAAM,QAAQ,IAAI,MAAM;AACtB,SAAM,OAAO,IAAP,CADgB;AAEtB,SAAI,cAAJ,CAFsB;AAGtB,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAHe;AAItB,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJsB;AAKtB,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CALsB;AAMtB,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AANnC,OAStB,GAAK,KAAK,EAAL,GAAU,YAAV,CATiB;AAUtB,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,CAAR,EAAoC,IAApC,CAAyC,YAAY;AAC1D,YAAK,KAAK,EAAL,GAAU,MAAV,CADqD;AAE1D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,IAAzB,EAF0D;AAG1D,cAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,MAAb,EAAqB,MAArB,EAA6B,EAA7B,EAAiC,IAAjC,CADK,EAEL,IAFK,CAAP,CAH0D;MAAZ,CAAzC,CAOJ,IAPI,CAOC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CAPD,CASJ,IATI,CASC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,WAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,IAArB,EAA2B,IAA3B,CAAR,EAA0C,IAA1C,CAA+C,UAAU,KAAV,EAAiB;;AAErE,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAF8D;QAAjB,CAAtD,CAHsB;MAAhB,CATR,CAVsB;IA/jBoB;;;;;;;;;;;;;;;AAwmB5C,6BAAS,QAAQ,OAAO,MAAM;AAC5B,SAAM,OAAO,IAAP,CADsB;AAE5B,SAAI,cAAJ,CAF4B;AAG5B,eAAU,QAAQ,EAAR,CAAV,CAH4B;AAI5B,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAJqB;AAK5B,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAL4B;AAM5B,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL,CAN7B;AAO5B,eAAU,KAAK,MAAL,EAAa,KAAvB,EAP4B;AAQ5B,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd;;;AAR4B,OAW5B,GAAK,KAAK,EAAL,GAAU,eAAV,CAXuB;AAY5B,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,CAAR,EAAuC,IAAvC,CAA4C,YAAY;AAC7D,YAAK,KAAK,EAAL,GAAU,SAAV,CADwD;AAE7D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,IAA5B,EAF6D;AAG7D,cAAO,KAAK,GAAL,CACL,KAAK,OAAL,CAAa,SAAb,EAAwB,MAAxB,EAAgC,KAAK,MAAL,EAAa,IAA7C,CADK,EAEL,IAFK,CAAP,CAH6D;MAAZ,CAA5C,CAOJ,IAPI,CAOC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CAPD,CASJ,IATI,CASC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,cAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,IAAxB,EAA8B,IAA9B,CAAR,EAA6C,IAA7C,CAAkD,UAAU,KAAV,EAAiB;;AAExE,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFiE;QAAjB,CAAzD,CAHsB;MAAhB,CATR,CAZ4B;IAxmBc;;;;;;;;;;;;;AAipB5C,qBAAK,KAAK,QAAQ,MAAM;AACtB,SAAM,OAAO,IAAP,CADgB;AAEtB,SAAI,cAAJ,CAFsB;AAGtB,gBAAW,SAAS,EAAT,CAAX,CAHsB;AAItB,cAAS,OAAO,EAAP,CAAT,CAJsB;AAKtB,YAAO,GAAP,GAAa,OAAO,OAAO,GAAP,CALE;AAMtB,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjB;;;AANM,OAStB,GAAK,KAAK,EAAL,GAAU,WAAV,CATiB;AAUtB,YAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,CAAR,EAAqC,IAArC,CAA0C,UAAU,OAAV,EAAmB;;AAElE,gBAAS,YAAY,OAAZ,IAAuB,MAAvB,GAAgC,OAAhC,CAFyD;AAGlE,YAAK,KAAK,EAAL,GAAU,KAAV,CAH6D;AAIlE,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,MAAlB,EAA0B,IAA1B,EAJkE;AAKlE,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP,CALkE;MAAnB,CAA1C,CAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAV,CAFqB;AAG1B,cAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,MAAd,EAAsB,IAAtB,EAA4B,QAA5B,CAAR,EAA+C,IAA/C,CAAoD,UAAU,SAAV,EAAqB;;AAE9E,gBAAO,YAAY,SAAZ,IAAyB,QAAzB,GAAoC,SAApC,CAFuE;QAArB,CAA3D,CAH0B;MAApB,CANR,CAVsB;IAjpBoB;;;;;;;;;;;AAmrB5C,qCAAa,QAAQ,IAAI,MAAM;AAC7B,SAAM,OAAO,IAAP,CADuB;AAE7B,cAAS,OAAO,EAAP,CAAT,CAF6B;AAG7B,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAH6B;;AAK7B,SAAI,WAAW,KAAK,cAAL,CAAoB,UAApB,IAAkC,KAAK,QAAL,GAAgB,OAAO,QAAP,CALpC;AAM7B,SAAI,UAAU,OAAO,OAAP,KAAmB,OAAO,MAAP,uBAC9B,OAAO,MAAP,EAAgB;AACf,YAAK,OAAO,SAAP;AACL,cAAO,OAAO,WAAP;OAHsB,GAK7B,EAL6B,CAAnB,CANe;;AAa7B,YAAO,OAAP,EAAgB,UAAU,MAAV,EAAkB,UAAlB,EAA8B;AAC5C,WAAI,gBAAJ,CAD4C;AAE5C,WAAI,YAAY,OAAO,GAAP,CAF4B;AAG5C,WAAI,cAAc,OAAO,KAAP,CAH0B;AAI5C,WAAI,YAAY,OAAO,WAAP,CAAmB,UAAnB,CAAZ,CAJwC;AAK5C,WAAI,WAAW,KAAK,MAAL,CAAY,SAAZ,CAAX,CALwC;;AAO5C,WAAI,aAAa,KAAb,IAAsB,CAAC,SAAD,IAAc,CAAC,SAAD,EAAY;AAClD,aAAI,aAAa,KAAb,EAAoB;AACtB,kBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP,CADsB;UAAxB;AAGA,gBAAO,KAAP,CAJkD;QAApD,MAKO;AACL,gBAAO,KAAK,MAAL,CAAY,SAAZ,CAAP,CADK;;AAGL,aAAI,SAAS,EAAT,KAAgB,SAAS,EAAT,CAAhB,EAA8B;AAChC,kBAAO,OAAO,GAAP,CAAW,EAAX,CAAP,CADgC;UAAlC,MAEO,IAAI,SAAS,EAAT,CAAJ,EAAkB;AACvB,kBAAO,EAAP,CADuB;UAAlB;;AAIP,aAAI,IAAJ,EAAU;AACR,sBAAW,YAAY,KAAK,SAAL,CAAZ,KAAgC,KAAK,WAAL,IAAoB,KAAK,WAAL,EAAkB,UAAU,WAAV,CAAtC,GAA+D,IAA/D,CAAhC,CADH;UAAV;;AAIA,aAAI,QAAJ,EAAc;;AACZ,oBAAO,KAAK,QAAL;AACP,iBAAM,QAAQ,EAAR;AACN,oBAAO,IAAP,EAAa,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACjC,qBAAM,GAAN,IAAa,KAAb,CADiC;cAAtB,CAAb;AAGA,eAAE,KAAF,EAAS,SAAT;AACA,wBAAW,SAAS,KAAK,WAAL,CAAiB,SAAjB,EAA4B,QAA5B,EAAsC,KAAtC,EAA6C,QAA7C,EAAuD,QAAvD,CAAT,CAAX;AACA;kBAAO;cAAP;eARY;;;UAAd;QAlBF;MAPc,CAAhB,CAb6B;;AAmD7B,YAAO,QAAP,CAnD6B;IAnrBa;;;;;;;;;;;AAivB5C,6BAAS,QAAQ,QAAQ,IAAI,MAAM;AACjC,SAAM,OAAO,IAAP,CAD2B;AAEjC,cAAS,OAAO,EAAP,CAAT,CAFiC;AAGjC,SAAM,OAAO,CACX,KAAK,QAAL,KAAkB,SAAlB,GAA+B,OAAO,QAAP,KAAoB,SAApB,GAAgC,KAAK,QAAL,GAAgB,OAAO,QAAP,GAAmB,KAAK,QAAL,EAClG,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAC,CAAS,EAAT,KAAgB,SAAS,EAAT,CAAhB,IAAgC,WAAW,QAAX,GAAuB,EAAxD,GAA6D,IAA7D,EAAmE,IAA5F,CAFW,CAAP,CAH2B;AAOjC,SAAI,WAAW,MAAX,IAAqB,WAAW,QAAX,IAAuB,WAAW,SAAX,EAAsB;AACpE,YAAK,IAAL,CAAU,EAAV,EADoE;MAAtE;AAGA,YAAO,SAAS,KAAT,gBAAsB,IAAtB,CAAP,CAViC;IAjvBS;;;;;;;;;;;;AAuwB5C,uBAAM,QAAQ,MAAM;AAClB,SAAM,OAAO,IAAP,CADY;AAElB,SAAM,QAAQ,IAAI,IAAJ,EAAR,CAFY;AAGlB,cAAS,OAAO,EAAP,CAAT,CAHkB;AAIlB,cAAS,KAAK,MAAL,CAAT,CAJkB;AAKlB,cAAS,UAAU,MAAV,EAAkB,KAAK,UAAL,CAA3B,CALkB;AAMlB,SAAI,KAAK,kBAAL,IAA2B,OAAO,GAAP,CAAW,OAAO,GAAP,CAAW,MAAX,GAAoB,CAApB,CAAX,KAAsC,GAAtC,EAA2C;AACxE,cAAO,GAAP,IAAc,GAAd,CADwE;MAA1E;AAGA,YAAO,MAAP,GAAgB,OAAO,MAAP,CAAc,WAAd,EAAhB,CATkB;AAUlB,SAAM,SAAS,OAAO,MAAP,IAAiB,KAAK,MAAL,IAAe,KAAK,MAAL,CAV7B;AAWlB,SAAI,UAAU,OAAO,GAAP,CAAW,MAAX,CAAkB,OAAO,GAAP,CAAW,MAAX,GAAoB,OAAO,MAAP,CAAtC,KAAyD,MAAzD,EAAiE;AAC7E,cAAO,GAAP,IAAc,MAAd,CAD6E;MAA/E;;AAIA,cAAS,WAAT,CAAsB,IAAtB,EAA4B;AAC1B,WAAM,MAAS,MAAM,WAAN,aAAyB,OAAO,MAAP,CAAc,WAAd,WAA+B,OAAO,GAAP,WAAgB,KAAK,MAAL,UAAgB,IAAI,IAAJ,GAAW,OAAX,KAAuB,MAAM,OAAN,EAAvB,QAAjG,CADoB;AAE1B,WAAI,KAAK,MAAL,IAAe,GAAf,IAAsB,KAAK,MAAL,GAAc,GAAd,EAAmB;AAC3C,aAAI,KAAK,GAAL,EAAU;AACZ,gBAAK,GAAL,CAAS,OAAT,EAAkB,GAAlB,EAAuB,IAAvB,EADY;UAAd;AAGA,gBAAO,IAAP,CAJ2C;QAA7C,MAKO;AACL,aAAI,KAAK,KAAL,EAAY;AACd,gBAAK,KAAL,gBAAuB,GAAvB,EAA8B,IAA9B,EADc;UAAhB;AAGA,gBAAO,OAAO,IAAP,CAAP,CAJK;QALP;MAFF;;AAeA,SAAI,CAAC,KAAK,IAAL,EAAW;AACd,aAAM,IAAI,KAAJ,CAAU,4DAAV,CAAN,CADc;MAAhB;;AAIA,YAAO,QAAQ,KAAK,UAAL,CAAgB,MAAhB,EAAwB,IAAxB,CAAR,EAAuC,IAAvC,CAA4C,UAAU,OAAV,EAAmB;AACpE,gBAAS,WAAW,MAAX,CAD2D;AAEpE,WAAI,aAAa,KAAK,QAAL,IAAiB,KAAK,QAAL,IAAiB,CAAC,KAAK,IAAL,CAAhD,EAA4D;AAC9D,gBAAO,KAAK,KAAL,CAAW,MAAX,EAAmB,IAAnB,EAAyB,IAAzB,CAA8B,WAA9B,EAA2C,WAA3C,CAAP,CAD8D;QAAhE;AAGA,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,CAD2E;QAAf,CAA9D,CALoE;MAAnB,CAA5C,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,QAAQ,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,QAA7B,CAAR,EAAgD,IAAhD,CAAqD,UAAU,SAAV,EAAqB;AAC/E,gBAAO,aAAa,QAAb,CADwE;QAArB,CAA5D,CAD0B;MAApB,CARR,CAlCkB;IAvwBwB;;;;;;;;;;;AAg0B5C,qBAAK,OAAgB;wCAAN;;MAAM;;AACnB,SAAI,SAAS,CAAC,KAAK,MAAL,EAAa;AACzB,YAAK,IAAL,CAAU,KAAV,EADyB;AAEzB,eAAQ,OAAR,CAFyB;MAA3B;AAIA,SAAI,UAAU,OAAV,IAAqB,CAAC,KAAK,KAAL,EAAY;AACpC,cADoC;MAAtC;AAGA,SAAM,SAAY,MAAM,WAAN,sBAAZ,CARa;AASnB,SAAI,QAAQ,KAAR,CAAJ,EAAoB;;;AAClB,6BAAQ,MAAR,mBAAe,eAAW,KAA1B,EADkB;MAApB,MAEO;;;AACL,6BAAQ,GAAR,mBAAY,eAAW,KAAvB,EADK;MAFP;IAz0B0C;;;;;;;;;;;;;;AA21B5C,uBAAM,KAAK,MAAM,QAAQ,MAAM;AAC7B,SAAM,OAAO,IAAP,CADuB;AAE7B,SAAI,cAAJ,CAF6B;AAG7B,gBAAW,SAAS,EAAT,CAAX,CAH6B;AAI7B,cAAS,OAAO,EAAP,CAAT,CAJ6B;AAK7B,YAAO,GAAP,GAAa,OAAO,OAAO,GAAP,CALS;AAM7B,YAAO,IAAP,GAAc,QAAQ,OAAO,IAAP,CANO;AAO7B,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,MAAjB;;;AAPa,OAU7B,GAAK,KAAK,EAAL,GAAU,YAAV,CAVwB;AAW7B,YAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAR,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,YAAY,OAAZ,IAAuB,MAAvB,GAAgC,OAAhC,CAF+D;AAGxE,YAAK,KAAK,EAAL,GAAU,MAAV,CAHmE;AAIxE,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC,EAJwE;AAKxE,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP,CALwE;MAAnB,CAAhD,CAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,WAAV,CAFqB;AAG1B,cAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAR,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,YAAY,SAAZ,IAAyB,QAAzB,GAAoC,SAApC,CAF6E;QAArB,CAAjE,CAH0B;MAApB,CANR,CAX6B;IA31Ba;;;;;;;;;;;;;;AAi4B5C,qBAAK,KAAK,MAAM,QAAQ,MAAM;AAC5B,SAAM,OAAO,IAAP,CADsB;AAE5B,SAAI,cAAJ,CAF4B;AAG5B,gBAAW,SAAS,EAAT,CAAX,CAH4B;AAI5B,cAAS,OAAO,EAAP,CAAT,CAJ4B;AAK5B,YAAO,GAAP,GAAa,OAAO,OAAO,GAAP,CALQ;AAM5B,YAAO,IAAP,GAAc,QAAQ,OAAO,IAAP,CANM;AAO5B,YAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjB;;;AAPY,OAU5B,GAAK,KAAK,EAAL,GAAU,WAAV,CAVuB;AAW5B,YAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,CAAR,EAA2C,IAA3C,CAAgD,UAAU,OAAV,EAAmB;;AAExE,gBAAS,YAAY,OAAZ,IAAuB,MAAvB,GAAgC,OAAhC,CAF+D;AAGxE,YAAK,KAAK,EAAL,GAAU,KAAV,CAHmE;AAIxE,YAAK,GAAL,CAAS,EAAT,EAAa,GAAb,EAAkB,IAAlB,EAAwB,MAAxB,EAAgC,IAAhC,EAJwE;AAKxE,cAAO,KAAK,IAAL,CAAU,MAAV,EAAkB,IAAlB,CAAP,CALwE;MAAnB,CAAhD,CAMJ,IANI,CAMC,UAAU,QAAV,EAAoB;;AAE1B,YAAK,KAAK,EAAL,GAAU,UAAV,CAFqB;AAG1B,cAAO,QAAQ,KAAK,EAAL,EAAS,GAAT,EAAc,IAAd,EAAoB,MAApB,EAA4B,IAA5B,EAAkC,QAAlC,CAAR,EAAqD,IAArD,CAA0D,UAAU,SAAV,EAAqB;;AAEpF,gBAAO,YAAY,SAAZ,IAAyB,QAAzB,GAAoC,SAApC,CAF6E;QAArB,CAAjE,CAH0B;MAApB,CANR,CAX4B;IAj4Bc;;;;;;;;;;;;;AAs6B5C,2CAAgB,QAAQ,QAAQ,MAAM;AACpC,cAAS,OAAO,EAAP,CAAT,CADoC;AAEpC,SAAI,WAAW,KAAK,cAAL,CAAf,EAAqC;AACnC,cAAO,KAAK,cAAL,CAAoB,MAApB,EAA4B,MAA5B,EAAoC,IAApC,CAAP,CADmC;MAArC;AAGA,SAAI,WAAW,OAAO,cAAP,CAAf,EAAuC;AACrC,cAAO,OAAO,cAAP,CAAsB,MAAtB,EAA8B,MAA9B,EAAsC,IAAtC,CAAP,CADqC;MAAvC;AAGA,YAAO,MAAP,CARoC;IAt6BM;;;;;;;;;;;;;;;;AA87B5C,yCAAe,KAAK,QAAQ,MAAM;AAChC,YAAO,OAAO,GAAP,CAAP,CADgC;IA97BU;;;;;;;;;;;;;AA48B5C,iCAAW,QAAQ,MAAM,MAAM;AAC7B,cAAS,OAAO,EAAP,CAAT,CAD6B;AAE7B,SAAI,WAAW,KAAK,SAAL,CAAf,EAAgC;AAC9B,cAAO,KAAK,SAAL,CAAe,MAAf,EAAuB,IAAvB,EAA6B,IAA7B,CAAP,CAD8B;MAAhC;AAGA,SAAI,WAAW,OAAO,SAAP,CAAf,EAAkC;AAChC,cAAO,OAAO,SAAP,CAAiB,MAAjB,EAAyB,IAAzB,EAA+B,IAA/B,CAAP,CADgC;MAAlC;AAGA,YAAO,IAAP,CAR6B;IA58Ba;;;;;;;;;;;;;;AAk+B5C,2BAAQ,QAAQ,IAAI,OAAO,MAAM;AAC/B,SAAM,OAAO,IAAP,CADyB;AAE/B,SAAI,cAAJ,CAF+B;AAG/B,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAHwB;AAI/B,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJ+B;AAK/B,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CAL+B;AAM/B,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AAN1B,OAS/B,GAAK,KAAK,EAAL,GAAU,cAAV,CAT0B;AAU/B,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,CAAR,EAA2C,IAA3C,CAAgD,YAAY;AACjE,YAAK,KAAK,EAAL,GAAU,QAAV,CAD4D;AAEjE,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,EAArB,EAAyB,KAAzB,EAAgC,IAAhC,EAFiE;AAGjE,cAAO,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,CAAP,CAHiE;MAAZ,CAAhD,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CARD,CAUJ,IAVI,CAUC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,aAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,EAAjB,EAAqB,KAArB,EAA4B,IAA5B,EAAkC,IAAlC,CAAR,EAAiD,IAAjD,CAAsD,UAAU,KAAV,EAAiB;;AAE5E,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFqE;QAAjB,CAA7D,CAHsB;MAAhB,CAVR,CAV+B;IAl+BW;;;;;;;;;;;;;;AA2gC5C,iCAAW,QAAQ,OAAO,OAAO,MAAM;AACrC,SAAM,OAAO,IAAP,CAD+B;AAErC,SAAI,cAAJ,CAFqC;AAGrC,eAAU,QAAQ,EAAR,CAAV,CAHqC;AAIrC,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAJ8B;AAKrC,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CALqC;AAMrC,eAAU,KAAK,MAAL,EAAa,KAAvB,EANqC;AAOrC,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CAPqC;AAQrC,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AARpB,OAWrC,GAAK,KAAK,EAAL,GAAU,iBAAV,CAXgC;AAYrC,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,CAAR,EAA8C,IAA9C,CAAmD,YAAY;AACpE,YAAK,KAAK,EAAL,GAAU,WAAV,CAD+D;AAEpE,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,KAArB,EAA4B,KAA5B,EAAmC,IAAnC,EAFoE;AAGpE,cAAO,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,CAAP,CAHoE;MAAZ,CAAnD,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CARD,CAUJ,IAVI,CAUC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,gBAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC,IAArC,CAAR,EAAoD,IAApD,CAAyD,UAAU,KAAV,EAAiB;;AAE/E,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFwE;QAAjB,CAAhE,CAHsB;MAAhB,CAVR,CAZqC;IA3gCK;;;;;;;;;;;;;;;;;;;;AA4jC5C,mCAAY,QAAQ,SAAS,MAAM;AACjC,SAAM,OAAO,IAAP,CAD2B;AAEjC,SAAI,cAAJ,CAFiC;AAGjC,YAAO,OAAO,KAAK,IAAL,CAAP,GAAoB,EAApB,CAH0B;AAIjC,UAAK,MAAL,KAAgB,KAAK,MAAL,GAAc,EAAd,CAAhB,CAJiC;AAKjC,UAAK,MAAL,GAAc,KAAK,cAAL,CAAoB,MAApB,EAA4B,KAAK,MAAL,EAAa,IAAzC,CAAd,CALiC;AAMjC,UAAK,MAAL,GAAc,YAAY,KAAK,MAAL,CAAZ,GAA2B,OAAO,MAAP,GAAgB,KAAK,MAAL;;;AANxB,OASjC,GAAK,KAAK,EAAL,GAAU,kBAAV,CAT4B;AAUjC,YAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,CAAR,EAAyC,IAAzC,CAA8C,YAAY;AAC/D,YAAK,KAAK,EAAL,GAAU,YAAV,CAD0D;AAE/D,YAAK,GAAL,CAAS,EAAT,EAAa,MAAb,EAAqB,OAArB,EAA8B,IAA9B,EAF+D;AAG/D,cAAO,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,CAAP,CAH+D;MAAZ,CAA9C,CAQJ,IARI,CAQC,UAAU,QAAV,EAAoB;AAC1B,cAAO,KAAK,WAAL,CAAiB,MAAjB,EAAyB,QAAzB,EAAmC,IAAnC,CAAP,CAD0B;MAApB,CARD,CAUJ,IAVI,CAUC,UAAU,IAAV,EAAgB;;AAEtB,YAAK,KAAK,EAAL,GAAU,iBAAV,CAFiB;AAGtB,cAAO,QAAQ,KAAK,EAAL,EAAS,MAAT,EAAiB,OAAjB,EAA0B,IAA1B,EAAgC,IAAhC,CAAR,EAA+C,IAA/C,CAAoD,UAAU,KAAV,EAAiB;;AAE1E,gBAAO,YAAY,KAAZ,IAAqB,IAArB,GAA4B,KAA5B,CAFmE;QAAjB,CAA3D,CAHsB;MAAhB,CAVR,CAViC;IA5jCS;EAA9C;;;;;;;;;;;;;;;;;AA0mCA,aAAY,SAAZ,GAAwB,UAAU,IAAV,EAAgB,IAAhB,EAAsB;AAC5C,OAAI,CAAC,IAAD,IAAS,CAAC,SAAS,IAAT,CAAD,EAAiB;AAC5B,WAAM,IAAI,SAAJ,CAAc,4DAA2D,mDAA3D,CAApB,CAD4B;IAA9B;AAGA,UAAO,UAAU,MAAV,EAAkB;AACvB,SAAI,OAAO,IAAP,CAAJ,EAAkB;AAChB,aAAM,IAAI,KAAJ,CAAU,2BAA2B,IAA3B,GAAkC,4BAAlC,CAAhB,CADgB;MAAlB;AAGA,UAAK,OAAL,GAAe,KAAK,OAAL,IAAgB,UAAU,MAAV,EAAkB;AAAE,cAAO,MAAP,CAAF;MAAlB,CAJR;AAKvB,UAAK,QAAL,GAAgB,KAAK,QAAL,IAAiB,UAAU,QAAV,EAAoB;AAAE,cAAO,QAAP,CAAF;MAApB,CALV;AAMvB,UAAK,aAAL,GAAqB,KAAK,aAAL,IAAsB,UAAU,GAAV,EAAe;AAAE,cAAO,OAAO,GAAP,CAAP,CAAF;MAAf,CANpB;AAOvB,YAAO,IAAP,IAAe,UAAU,EAAV,EAAc,KAAd,EAAqB;AAClC,WAAM,OAAO,IAAP,CAD4B;AAElC,WAAI,SAAS,EAAT,CAAJ,EAAkB;AAChB,iBAAQ,EAAR,CADgB;QAAlB;AAGA,eAAQ,SAAS,EAAT,CAL0B;AAMlC,WAAI,UAAU,KAAK,UAAL,CAAgB,KAAK,OAAL,IAAgB,KAAK,cAAL,IAAuB,MAAvC,CAA1B,CAN8B;AAOlC,WAAI,SAAS,EAAT,CAP8B;AAQlC,cAAO,MAAP,EAAe,IAAf,EARkC;AASlC,WAAI,CAAC,MAAM,cAAN,CAAqB,UAArB,CAAD,IAAqC,OAAO,QAAP,EAAiB;AACxD,eAAM,QAAN,GAAiB,OAAO,QAAP,CADuC;QAA1D;AAGA,WAAI,OAAO,MAAM,WAAN,KAAsB,UAA7B,EAAyC;AAC3C,gBAAO,GAAP,GAAa,MAAM,WAAN,CAAkB,IAAlB,EAAwB,KAAxB,CAAb,CAD2C;QAA7C,MAEO;AACL,aAAI,QAAO,CACT,MAAM,QAAN,IAAkB,KAAK,QAAL,IAAiB,QAAQ,QAAR,EACnC,QAAQ,WAAR,CAAoB,IAApB,EAA0B,OAAO,EAAP,IAAa,EAAb,GAAkB,IAAlB,EAAwB,KAAlD,CAFS,CAAP,CADC;AAKL,aAAI,OAAO,EAAP,CAAJ,EAAgB;AACd,iBAAK,IAAL,CAAU,EAAV,EADc;UAAhB;AAGA,eAAK,IAAL,CAAU,KAAK,QAAL,IAAiB,IAAjB,CAAV,CARK;AASL,gBAAO,GAAP,GAAa,SAAS,KAAT,CAAe,IAAf,EAAqB,KAArB,CAAb,CATK;QAFP;AAaA,cAAO,MAAP,GAAgB,OAAO,MAAP,IAAiB,KAAjB,CAzBkB;AA0BlC,cAAO,MAAP,GAAgB,KAAK,IAAL,CA1BkB;AA2BlC,iBAAU,MAAV,EAAkB,KAAlB,EA3BkC;AA4BlC,cAAO,QAAQ,MAAR,EACJ,IADI,CACC,MAAM,OAAN,IAAiB,KAAK,OAAL,CADlB,CAEJ,IAFI,CAEC,UAAU,MAAV,EAAkB;AAAE,gBAAO,QAAQ,IAAR,CAAa,MAAb,CAAP,CAAF;QAAlB,CAFD,CAGJ,IAHI,CAGC,UAAU,IAAV,EAAgB;AACpB,aAAI,QAAQ,KAAK,MAAL,EAAa;AACvB,gBAAK,MAAL,CAAY,MAAZ,GAAqB,KAAK,IAAL,CADE;UAAzB;AAGA,gBAAO,IAAP,CAJoB;QAAhB,CAHD,CASJ,IATI,CASC,MAAM,QAAN,IAAkB,KAAK,QAAL,EAAe,MAAM,aAAN,IAAuB,KAAK,aAAL,CAThE,CA5BkC;MAArB,CAPQ;AA8CvB,YAAO,MAAP,CA9CuB;IAAlB,CAJqC;EAAtB;;;;;;;;;;;;;AAiExB,aAAY,UAAZ,GAAyB,UAAU,IAAV,EAAgB;AACvC,YAAS,OAAO,EAAP,CAAT,CADuC;AAEvC,UAAO,UAAU,MAAV,EAAkB;AACvB,YAAO,MAAP,EAAe,UAAU,KAAV,EAAiB,GAAjB,EAAsB;AACnC,mBAAY,SAAZ,CAAsB,GAAtB,EAA2B,KAA3B,EAAkC,MAAlC,EADmC;MAAtB,CAAf,CADuB;AAIvB,YAAO,MAAP,CAJuB;IAAlB,CAFgC;EAAhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDzB,aAAY,MAAZ,GAAqB,MAArB;;;;;;;;;;;;;;;;AAgBA,aAAY,OAAZ,GAAsB;AACpB,SAAM,oBAAN;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,SAAS,cAAT,EAAyB,EAAzB,CAAP;AACA,UAAO,QAA6B,cAA7B,GAA8C,KAA9C;AACP,SAAM,QAA4B,aAA5B,GAA4C,KAA5C;EANR;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,QAAO,OAAP,GAAiB,WAAjB,C;;;;;;AC77CA,gD;;;;;;ACAA,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_2__) {\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 d36377afc06f51f4e1b6\n **/","/* global fetch:true Headers:true Request:true */\nconst axios = require('axios')\nimport {utils} from 'js-data'\nconst {\n _,\n addHiddenPropsToTarget,\n copy,\n deepMixIn,\n extend,\n fillIn,\n forOwn,\n isArray,\n isFunction,\n isNumber,\n isObject,\n isSorN,\n isString,\n isUndefined,\n resolve,\n reject,\n toJson\n} = utils\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 forOwn(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return\n }\n if (!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 (isObject(v)) {\n v = 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 noop = function (...args) {\n const self = this\n const opts = args[args.length - 1]\n self.dbg(opts.op, ...args)\n}\n\nconst noop2 = function (...args) {\n const self = this\n const opts = args[args.length - 2]\n self.dbg(opts.op, ...args)\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#debug\n * @type {boolean}\n * @default false\n */\n debug: false,\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 * @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\n // Default values for arguments\n opts || (opts = {})\n\n fillIn(self, opts)\n fillIn(self, DEFAULTS)\n}\n\naddHiddenPropsToTarget(HttpAdapter.prototype, {\n /**\n * @name HttpAdapter#afterCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreate: noop2,\n\n /**\n * @name HttpAdapter#afterCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterCreateMany: noop2,\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#afterDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroy: noop2,\n\n /**\n * @name HttpAdapter#afterDestroyAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterDestroyAll: noop2,\n\n /**\n * @name HttpAdapter#afterFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFind: noop2,\n\n /**\n * @name HttpAdapter#afterFindAll\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n * @param {Object} data\n */\n afterFindAll: 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#afterUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdate: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateAll: noop2,\n\n /**\n * @name HttpAdapter#afterUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n * @param {Object} data\n */\n afterUpdateMany: noop2,\n\n /**\n * @name HttpAdapter#beforeCreate\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} opts\n */\n beforeCreate: noop,\n\n /**\n * @name HttpAdapter#beforeCreateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeCreateMany: noop,\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#beforeDestroy\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeDestroy: noop,\n\n /**\n * @name HttpAdapter#beforeDestroyAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeDestroyAll: noop,\n\n /**\n * @name HttpAdapter#beforeFind\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} opts\n */\n beforeFind: noop,\n\n /**\n * @name HttpAdapter#beforeFindAll\n * @method\n * @param {Object} mapper\n * @param {Object} query\n * @param {Object} opts\n */\n beforeFindAll: 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 /**\n * @name HttpAdapter#beforeUpdate\n * @method\n * @param {Object} mapper\n * @param {(string|number)} id\n * @param {Object} props\n * @param {Object} opts\n */\n beforeUpdate: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateAll\n * @method\n * @param {Object} mapper\n * @param {Object} props\n * @param {Object} query\n * @param {Object} opts\n */\n beforeUpdateAll: noop,\n\n /**\n * @name HttpAdapter#beforeUpdateMany\n * @method\n * @param {Object} mapper\n * @param {Object} records\n * @param {Object} opts\n */\n beforeUpdateMany: noop,\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreate lifecycle hook\n op = opts.op = 'beforeCreate'\n return resolve(self[op](mapper, props, opts)).then(function () {\n op = opts.op = 'create'\n self.dbg(op, mapper, props, opts)\n return self.POST(\n self.getPath('create', mapper, props, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreate lifecycle hook\n op = opts.op = 'afterCreate'\n return resolve(self[op](mapper, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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} 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 createMany (mapper, records, opts) {\n const self = this\n let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeCreateMany lifecycle hook\n op = opts.op = 'beforeCreateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'createMany'\n self.dbg(op, mapper, records, opts)\n return self.POST(\n self.getPath('createMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterCreateMany lifecycle hook\n op = opts.op = 'afterCreateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n },\n\n /**\n * Call {@link HttpAdapter#log} at the \"debug\" level.\n *\n * @name HttpAdapter#dbg\n * @method\n * @param {...*} [args] Args passed to {@link HttpAdapter#log}.\n */\n dbg (...args) {\n this.log('debug', ...args)\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.deserialize)) {\n return opts.deserialize(mapper, response, opts)\n }\n if (isFunction(mapper.deserialize)) {\n return mapper.deserialize(mapper, response, opts)\n }\n if (opts.raw) {\n return response\n }\n return response ? ('data' in response ? response.data : response) : 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroy lifecycle hook\n op = opts.op = 'beforeDestroy'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'destroy'\n self.dbg(op, mapper, id, opts)\n return self.DEL(\n self.getPath('destroy', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroy lifecycle hook\n op = opts.op = 'afterDestroy'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeDestroyAll lifecycle hook\n op = opts.op = 'beforeDestroyAll'\n return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () {\n op = opts.op = 'destroyAll'\n self.dbg(op, mapper, query, opts)\n return self.DEL(\n self.getPath('destroyAll', mapper, null, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterDestroyAll lifecycle hook\n op = opts.op = 'afterDestroyAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 = 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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeFind lifecycle hook\n op = opts.op = 'beforeFind'\n return resolve(self[op](mapper, id, opts)).then(function () {\n op = opts.op = 'find'\n self.dbg(op, mapper, id, opts)\n return self.GET(\n self.getPath('find', mapper, id, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFind lifecycle hook\n op = opts.op = 'afterFind'\n return resolve(self[op](mapper, id, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n\n // beforeFindAll lifecycle hook\n op = opts.op = 'beforeFindAll'\n return resolve(self[op](mapper, query, opts)).then(function () {\n op = opts.op = 'findAll'\n self.dbg(op, mapper, query, opts)\n return self.GET(\n self.getPath('findAll', mapper, opts.params, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterFindAll lifecycle hook\n op = opts.op = 'afterFindAll'\n return resolve(self[op](mapper, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 resolve(self[op](url, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 || (opts.params = {})\n\n let endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint\n let parents = mapper.parents || (mapper.parent ? {\n [mapper.parent]: {\n key: mapper.parentKey,\n field: mapper.parentField\n }\n } : {})\n\n forOwn(parents, function (parent, parentName) {\n let item\n let parentKey = parent.key\n let parentField = parent.field\n let parentDef = mapper.getResource(parentName)\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 (isString(id) || isNumber(id)) {\n item = mapper.get(id)\n } else if (isObject(id)) {\n item = id\n }\n\n if (item) {\n parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null)\n }\n\n if (parentId) {\n delete opts.endpoint\n const _opts = {}\n forOwn(opts, function (value, key) {\n _opts[key] = value\n })\n _(_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 opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath,\n self.getEndpoint(mapper, (isString(id) || 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 /**\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 config = copy(config)\n config = deepMixIn(config, self.httpConfig)\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 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 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) {\n return _response || response\n })\n })\n },\n\n /**\n * Log the provided arguments at the specified leve.\n *\n * @name HttpAdapter#log\n * @method\n * @param {string} level Log level.\n * @param {...*} [args] Arguments 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()}: (HttpAdapter)`\n if (console[level]) {\n console[level](prefix, ...args)\n } else {\n console.log(prefix, ...args)\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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 resolve(self[op](url, data, config, opts)).then(function (_config) {\n // Allow re-assignment from lifecycle hook\n config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) {\n // Allow re-assignment from lifecycle hook\n return 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 (isFunction(opts.queryTransform)) {\n return opts.queryTransform(mapper, params, opts)\n }\n if (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 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 (isFunction(opts.serialize)) {\n return opts.serialize(mapper, data, opts)\n }\n if (isFunction(mapper.serialize)) {\n return mapper.serialize(mapper, data, opts)\n }\n return data\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdate lifecycle hook\n op = opts.op = 'beforeUpdate'\n return resolve(self[op](mapper, id, props, opts)).then(function () {\n op = opts.op = 'update'\n self.dbg(op, mapper, id, props, opts)\n return self.PUT(\n self.getPath('update', mapper, id, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdate lifecycle hook\n op = opts.op = 'afterUpdate'\n return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n query || (query = {})\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n deepMixIn(opts.params, query)\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateAll lifecycle hook\n op = opts.op = 'beforeUpdateAll'\n return resolve(self[op](mapper, props, query, opts)).then(function () {\n op = opts.op = 'updateAll'\n self.dbg(op, mapper, props, query, opts)\n return self.PUT(\n self.getPath('updateAll', mapper, null, opts),\n self.serialize(mapper, props, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateAll lifecycle hook\n op = opts.op = 'afterUpdateAll'\n return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\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 let op\n opts = opts ? copy(opts) : {}\n opts.params || (opts.params = {})\n opts.params = self.queryTransform(mapper, opts.params, opts)\n opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix\n\n // beforeUpdateMany lifecycle hook\n op = opts.op = 'beforeUpdateMany'\n return resolve(self[op](mapper, records, opts)).then(function () {\n op = opts.op = 'updateMany'\n self.dbg(op, mapper, records, opts)\n return self.PUT(\n self.getPath('updateMany', mapper, null, opts),\n self.serialize(mapper, records, opts),\n opts\n )\n }).then(function (response) {\n return self.deserialize(mapper, response, opts)\n }).then(function (data) {\n // afterUpdateMany lifecycle hook\n op = opts.op = 'afterUpdateMany'\n return resolve(self[op](mapper, records, opts, data)).then(function (_data) {\n // Allow re-assignment from lifecycle hook\n return isUndefined(_data) ? data : _data\n })\n })\n }\n})\n\n/**\n * Add an Http actions to a mapper.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.addAction = function (name, opts) {\n if (!name || !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 reject(err) }\n mapper[name] = function (id, _opts) {\n const self = this\n if (isObject(id)) {\n _opts = id\n }\n _opts = _opts || {}\n let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http')\n let config = {}\n 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, isSorN(id) ? id : null, _opts)\n ]\n if (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 deepMixIn(config)(_opts)\n return 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 HttpAdapter.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 */\nHttpAdapter.addActions = function (opts) {\n opts || (opts = {})\n return function (mapper) {\n forOwn(mapper, function (value, key) {\n HttpAdapter.addAction(key, value)(mapper)\n })\n return mapper\n }\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 = extend\n\n/**\n * Details of the current version of the `js-data-http` module.\n *\n * @name HttpAdapter.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 */\nHttpAdapter.version = {\n full: '<%= pkg.version %>',\n major: parseInt('<%= major %>', 10),\n minor: parseInt('<%= minor %>', 10),\n patch: parseInt('<%= patch %>', 10),\n alpha: '<%= alpha %>' !== 'false' ? '<%= alpha %>' : false,\n beta: '<%= beta %>' !== 'false' ? '<%= beta %>' : false\n}\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\nmodule.exports = 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 **/","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"axios\"\n ** module id = 2\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/node/package.json b/node/package.json index d8fbcf6..183079f 100644 --- a/node/package.json +++ b/node/package.json @@ -1,13 +1,13 @@ { "name": "js-data-http-node", "description": "Node.js HTTP adapter for js-data.", - "version": "3.0.0-alpha.4", + "version": "3.0.0-alpha.5", "homepage": "https://github.com/js-data/js-data-http", "repository": { "type": "git", "url": "https://github.com/js-data/js-data-http.git" }, - "author": "Jason Dobry (http://www.pseudobry.com)", + "author": "js-data-http project authors", "license": "MIT", "main": "./dist/js-data-http-node.js", "keywords": [ @@ -19,6 +19,6 @@ "node.js" ], "peerDependencies": { - "axios": "0.8.x" + "axios": "0.9.x" } } diff --git a/package.json b/package.json index 681d6bf..e5973a5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "js-data-http", - "description": "HTTP adapter for js-data.", - "version": "2.2.0", + "description": "HTTP (XHR) adapter for js-data in the browser.", + "version": "3.0.0-alpha.5", "homepage": "https://github.com/js-data/js-data-http", "repository": { "type": "git", @@ -20,51 +20,73 @@ "xhr" ], "standard": { - "parser": "babel-eslint" + "parser": "babel-eslint", + "globals": [ + "Headers", + "fetch", + "Request", + "action", + "describe", + "it", + "sinon", + "before", + "after", + "beforeEach", + "afterEach" + ] }, "scripts": { - "lint": "standard src/**/*.js", - "bundle": "webpack --config webpack.config.js --colors", + "lint": "standard karma.start.js karma.conf.js src/**/*.js test/*.test.js fetch/karma.*.js node/mocha.start.js", + "doc": "jsdoc -c conf.json src && node scripts/cleanup.js", + "webpack": "webpack --config webpack.config.js && webpack --config node/webpack.config.js && webpack --config fetch/webpack.config.js", "min": "uglifyjs dist/js-data-http.js -o dist/js-data-http.min.js --source-map dist/js-data-http.min.map -v -m -c --screw-ie8", "min_fetch": "uglifyjs fetch/dist/js-data-fetch.js -o fetch/dist/js-data-fetch.min.js --source-map fetch/dist/js-data-fetch.min.map -v -m -c --screw-ie8", "version": "node scripts/version.js", "banner": "node scripts/banner.js", - "gzip": "echo gzipped size: $(cat dist/js-data-http.min.js | gzip -f9 | wc -c)kb", - "build": "npm run lint && npm run bundle && npm run min && npm run version && npm run banner", + "gzip": "echo js-data-http gzipped size: $(cat dist/js-data-http.min.js | gzip -f9 | wc -c)kb", + "gzip_fetch": "echo js-data-fetch gzipped size: $(cat fetch/dist/js-data-fetch.min.js | gzip -f9 | wc -c)kb", + "build": "npm run lint && npm run webpack && npm run min && npm run min_fetch && npm run version && npm run banner", "karma": "karma start", - "test": "npm run build && npm run karma", - "release": "npm test && node scripts/authors.js", - "ci": "npm test && cat ./coverage/PhantomJS*/lcov.info | coveralls || true && cat ./coverage/PhantomJS*/lcov.info | codacy-coverage || true" + "karma_fetch": "karma start fetch/karma.conf.js", + "mocha": "mocha -t 20000 -R dot -r source-map-support/register node/mocha.start.js test/*.test.js", + "cover": "istanbul cover -x node/dist/js-data-http-node-tests.js --hook-run-in-context node_modules/mocha/bin/_mocha -- -t 20000 -R dot -r source-map-support/register node/mocha.start.js test/*.test.js", + "test": "npm run build && npm run karma && npm run karma_fetch && npm run cover", + "release": "npm test && npm run doc && node scripts/authors.js", + "ci": "npm test && cat ./coverage/lcov.info | coveralls || true && cat ./coverage/lcov.info | codacy-coverage || true" + }, + "dependencies": { + "js-data": "^3.0.0-alpha.15" }, "devDependencies": { "axios": "0.9.1", "babel-core": "6.5.2", "babel-eslint": "5.0.0", "babel-loader": "6.2.3", + "babel-plugin-syntax-async-functions": "6.5.0", + "babel-plugin-transform-regenerator": "6.5.2", + "babel-polyfill": "6.5.0", "babel-preset-es2015": "6.5.0", + "babel-preset-stage-0": "6.5.0", "chai": "3.5.0", "codacy-coverage": "1.1.3", "coveralls": "2.11.6", "es6-promise": "3.1.2", + "ink-docstrap": "1.1.2", + "istanbul": "0.4.2", + "jsdoc": "3.4.0", "karma": "0.13.21", "karma-browserstack-launcher": "0.1.10", "karma-chai": "0.1.0", - "karma-chrome-launcher": "0.2.2", - "karma-coverage": "0.5.3", - "karma-firefox-launcher": "0.1.7", "karma-junit-reporter": "0.3.8", "karma-mocha": "0.2.2", - "karma-phantomjs-launcher": "0.2.1", + "karma-phantomjs-launcher": "1.0.0", "karma-sinon": "1.0.4", "mocha": "2.4.5", - "mout": "0.11.1", - "phantomjs": "1.9.18", - "sinon": "1.17.2", + "phantomjs-prebuilt": "2.1.4", + "sinon": "1.17.3", + "source-map-support": "0.4.0", "standard": "6.0.7", "uglify-js": "2.6.2", "webpack": "1.12.14" - }, - "dependencies": { - "js-data": ">=2.0.0 <3" } } diff --git a/scripts/authors.js b/scripts/authors.js index 82a856d..975e552 100644 --- a/scripts/authors.js +++ b/scripts/authors.js @@ -30,6 +30,12 @@ exec('git shortlog -s -e < ' + tty, function (err, stdout, stderr) { fs.writeFileSync(__dirname + '/../AUTHORS', authorsFile + names.join('\n'), { encoding: 'utf-8' }) + fs.writeFileSync(__dirname + '/../fetch/AUTHORS', authorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(__dirname + '/../node/AUTHORS', authorsFile + names.join('\n'), { + encoding: 'utf-8' + }) console.log('Done!') console.log('Writing CONTRIBUTORS file...') @@ -40,6 +46,12 @@ exec('git shortlog -s -e < ' + tty, function (err, stdout, stderr) { fs.writeFileSync(__dirname + '/../CONTRIBUTORS', contributorsFile + names.join('\n'), { encoding: 'utf-8' }) + fs.writeFileSync(__dirname + '/../fetch/CONTRIBUTORS', contributorsFile + names.join('\n'), { + encoding: 'utf-8' + }) + fs.writeFileSync(__dirname + '/../node/CONTRIBUTORS', contributorsFile + names.join('\n'), { + encoding: 'utf-8' + }) console.log('Done!') } }) diff --git a/src/index.js b/src/index.js index 9ece506..6254a36 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,86 @@ -let JSData = require('js-data') -let axios = null +/* global fetch:true Headers:true Request:true */ +const axios = require('axios') +import {utils} from 'js-data' +const { + _, + addHiddenPropsToTarget, + copy, + deepMixIn, + extend, + fillIn, + forOwn, + isArray, + isFunction, + isNumber, + isObject, + isSorN, + isString, + isUndefined, + resolve, + reject, + toJson +} = utils + +let hasFetch = false try { - axios = require('axios') + hasFetch = window && window.fetch } catch (e) {} -let { DSUtils } = JSData -let { deepMixIn, removeCircular, copy, makePath, isString, isNumber } = DSUtils +function isValidString (value) { + return (value != null && value !== '') +} +function join (items, separator) { + separator || (separator = '') + return items.filter(isValidString).join(separator) +} +function makePath (...args) { + let 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 + } + + const parts = [] + + forOwn(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return + } + if (!isArray(val)) { + val = [val] + } + + val.forEach(function (v) { + if (window.toString.call(v) === '[object Date]') { + v = v.toISOString() + } else if (isObject(v)) { + v = toJson(v) + } + parts.push(`${encode(key)}=${encode(v)}`) + }) + }) + + if (parts.length > 0) { + url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&') + } + + return url +} const noop = function (...args) { const self = this @@ -65,14 +139,399 @@ const DEFAULTS = { * @type {boolean} * @default false */ - self.useFetch = opts.useFetch === undefined ? false : opts.useFetch + useFetch: false +} + +/** + * HttpAdapter class. + * + * @class HttpAdapter + * @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) { + const self = this - log () {} + // Default values for arguments + opts || (opts = {}) - error () {} + fillIn(self, opts) + fillIn(self, DEFAULTS) } -let defaultsPrototype = Defaults.prototype +addHiddenPropsToTarget(HttpAdapter.prototype, { + /** + * @name HttpAdapter#afterCreate + * @method + * @param {Object} mapper + * @param {Object} props + * @param {Object} opts + * @param {Object} data + */ + afterCreate: noop2, + + /** + * @name HttpAdapter#afterCreateMany + * @method + * @param {Object} mapper + * @param {Object} records + * @param {Object} opts + * @param {Object} data + */ + afterCreateMany: noop2, + + /** + * @name HttpAdapter#afterDEL + * @method + * @param {string} url + * @param {Object} config + * @param {Object} opts + * @param {Object} response + */ + afterDEL: noop2, + + /** + * @name HttpAdapter#afterDestroy + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + * @param {Object} data + */ + afterDestroy: noop2, + + /** + * @name HttpAdapter#afterDestroyAll + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + * @param {Object} data + */ + afterDestroyAll: noop2, + + /** + * @name HttpAdapter#afterFind + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + * @param {Object} data + */ + afterFind: noop2, + + /** + * @name HttpAdapter#afterFindAll + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + * @param {Object} data + */ + afterFindAll: 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#afterUpdate + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} props + * @param {Object} opts + * @param {Object} data + */ + afterUpdate: noop2, + + /** + * @name HttpAdapter#afterUpdateAll + * @method + * @param {Object} mapper + * @param {Object} props + * @param {Object} query + * @param {Object} opts + * @param {Object} data + */ + afterUpdateAll: noop2, + + /** + * @name HttpAdapter#afterUpdateMany + * @method + * @param {Object} mapper + * @param {Object} records + * @param {Object} opts + * @param {Object} data + */ + afterUpdateMany: noop2, + + /** + * @name HttpAdapter#beforeCreate + * @method + * @param {Object} mapper + * @param {Object} props + * @param {Object} opts + */ + beforeCreate: noop, + + /** + * @name HttpAdapter#beforeCreateMany + * @method + * @param {Object} mapper + * @param {Object} records + * @param {Object} opts + */ + beforeCreateMany: noop, + + /** + * @name HttpAdapter#beforeDEL + * @method + * @param {Object} url + * @param {Object} config + * @param {Object} opts + */ + beforeDEL: noop, + + /** + * @name HttpAdapter#beforeDestroy + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + */ + beforeDestroy: noop, + + /** + * @name HttpAdapter#beforeDestroyAll + * @method + * @param {Object} mapper + * @param {Object} query + * @param {Object} opts + */ + beforeDestroyAll: noop, + + /** + * @name HttpAdapter#beforeFind + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} opts + */ + beforeFind: noop, + + /** + * @name HttpAdapter#beforeFindAll + * @method + * @param {Object} mapper + * @param {Object} query + * @param {Object} opts + */ + beforeFindAll: 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, + + /** + * @name HttpAdapter#beforeUpdate + * @method + * @param {Object} mapper + * @param {(string|number)} id + * @param {Object} props + * @param {Object} opts + */ + beforeUpdate: noop, + + /** + * @name HttpAdapter#beforeUpdateAll + * @method + * @param {Object} mapper + * @param {Object} props + * @param {Object} query + * @param {Object} opts + */ + beforeUpdateAll: noop, + + /** + * @name HttpAdapter#beforeUpdateMany + * @method + * @param {Object} mapper + * @param {Object} records + * @param {Object} opts + */ + beforeUpdateMany: noop, + + /** + * 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 (mapper, props, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeCreate lifecycle hook + op = opts.op = 'beforeCreate' + return resolve(self[op](mapper, props, opts)).then(function () { + op = opts.op = 'create' + self.dbg(op, mapper, props, opts) + return self.POST( + self.getPath('create', mapper, props, opts), + self.serialize(mapper, props, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterCreate lifecycle hook + op = opts.op = 'afterCreate' + return resolve(self[op](mapper, props, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * Create multiple new records in batch. + * + * @name HttpAdapter#createMany + * @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} + */ + createMany (mapper, records, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeCreateMany lifecycle hook + op = opts.op = 'beforeCreateMany' + return resolve(self[op](mapper, records, opts)).then(function () { + op = opts.op = 'createMany' + self.dbg(op, mapper, records, opts) + return self.POST( + self.getPath('createMany', mapper, null, opts), + self.serialize(mapper, records, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterCreateMany lifecycle hook + op = opts.op = 'afterCreateMany' + return resolve(self[op](mapper, records, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * Call {@link HttpAdapter#log} at the "debug" level. + * + * @name HttpAdapter#dbg + * @method + * @param {...*} [args] Args passed to {@link HttpAdapter#log}. + */ + dbg (...args) { + this.log('debug', ...args) + }, /** * Make an Http request to `url` according to the configuration in `config`. @@ -111,16 +570,123 @@ let defaultsPrototype = Defaults.prototype }) }, - afterDEL () {}, + /** + * 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 (mapper, response, opts) { + opts || (opts = {}) + if (isFunction(opts.deserialize)) { + return opts.deserialize(mapper, response, opts) + } + if (isFunction(mapper.deserialize)) { + return mapper.deserialize(mapper, response, opts) + } + if (opts.raw) { + return response + } + return response ? ('data' in response ? response.data : response) : response + }, -defaultsPrototype.verbsUseBasePath = false + /** + * 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 (mapper, id, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix -defaultsPrototype.useFetch = false; + // beforeDestroy lifecycle hook + op = opts.op = 'beforeDestroy' + return resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'destroy' + self.dbg(op, mapper, id, opts) + return self.DEL( + self.getPath('destroy', mapper, id, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterDestroy lifecycle hook + op = opts.op = 'afterDestroy' + return resolve(self[op](mapper, id, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * 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 (mapper, query, opts) { + const self = this + let op + query || (query = {}) + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + deepMixIn(opts.params, query) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix -class DSHttpAdapter { - constructor (options) { - options = options || {} - this.defaults = new Defaults() + // beforeDestroyAll lifecycle hook + op = opts.op = 'beforeDestroyAll' + return resolve(self.beforeDestroyAll(mapper, query, opts)).then(function () { + op = opts.op = 'destroyAll' + self.dbg(op, mapper, query, opts) + return self.DEL( + self.getPath('destroyAll', mapper, null, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterDestroyAll lifecycle hook + op = opts.op = 'afterDestroyAll' + return resolve(self[op](mapper, query, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * Log an error. + * + * @name HttpAdapter#error + * @method + * @param {...*} [args] Arguments to log. + */ + error (...args) { if (console) { console[typeof console.error === 'function' ? 'error' : 'log'](...args) } @@ -145,124 +711,262 @@ class DSHttpAdapter { // turn the plain headers object into the Fetch Headers object headers: new Headers(config.headers) } - deepMixIn(this.defaults, options) - this.http = options.http || axios - } - getEndpoint (resourceConfig, id, options) { - options = options || {} - options.params = options.params || {} + if (config.data) { + requestConfig.body = toJson(config.data) + } - let endpoint = options.hasOwnProperty('endpoint') ? options.endpoint : resourceConfig.endpoint - let parents = resourceConfig.parents || (resourceConfig.parent ? { - [resourceConfig.parent]: { - key: resourceConfig.parentKey, - field: resourceConfig.parentField + 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 (mapper, id, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeFind lifecycle hook + op = opts.op = 'beforeFind' + return resolve(self[op](mapper, id, opts)).then(function () { + op = opts.op = 'find' + self.dbg(op, mapper, id, opts) + return self.GET( + self.getPath('find', mapper, id, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterFind lifecycle hook + op = opts.op = 'afterFind' + return resolve(self[op](mapper, id, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * 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 (mapper, query, opts) { + const self = this + let op + query || (query = {}) + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + deepMixIn(opts.params, query) + opts.params = self.queryTransform(mapper, opts.params, opts) + + // beforeFindAll lifecycle hook + op = opts.op = 'beforeFindAll' + return resolve(self[op](mapper, query, opts)).then(function () { + op = opts.op = 'findAll' + self.dbg(op, mapper, query, opts) + return self.GET( + self.getPath('findAll', mapper, opts.params, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterFindAll lifecycle hook + op = opts.op = 'afterFindAll' + return resolve(self[op](mapper, query, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * 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 (url, config, opts) { + const self = this + let op + config || (config = {}) + opts || (opts = {}) + config.url = url || config.url + config.method = config.method || 'get' + + // beforeGET lifecycle hook + op = opts.op = 'beforeGET' + return resolve(self[op](url, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = 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 resolve(self[op](url, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return isUndefined(_response) ? response : _response + }) + }) + }, + + /** + * @name HttpAdapter#getEndpoint + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {boolean} opts TODO + * @return {string} Full path. + */ + getEndpoint (mapper, id, opts) { + const self = this + opts || (opts = {}) + opts.params || (opts.params = {}) + + let endpoint = opts.hasOwnProperty('endpoint') ? opts.endpoint : mapper.endpoint + let parents = mapper.parents || (mapper.parent ? { + [mapper.parent]: { + key: mapper.parentKey, + field: mapper.parentField } } : {}) - DSUtils.forOwn(parents, function (parent, parentName) { + forOwn(parents, function (parent, parentName) { let item let parentKey = parent.key let parentField = parent.field - let parentDef = resourceConfig.getResource(parentName) - let parentId = options.params[parentKey] + let parentDef = mapper.getResource(parentName) + let parentId = opts.params[parentKey] if (parentId === false || !parentKey || !parentDef) { if (parentId === false) { - delete options.params[parentKey] + delete opts.params[parentKey] } + return false } else { - delete options.params[parentKey] + delete opts.params[parentKey] - if (DSUtils._sn(id)) { - item = resourceConfig.get(id) - } else if (DSUtils._o(id)) { + if (isString(id) || isNumber(id)) { + item = mapper.get(id) + } else if (isObject(id)) { item = id } - console.log('item', item) if (item) { parentId = parentId || item[parentKey] || (item[parentField] ? item[parentField][parentDef.idAttribute] : null) } if (parentId) { - delete options.endpoint - let _options = {} - DSUtils.forOwn(options, (value, key) => { - _options[key] = value + delete opts.endpoint + const _opts = {} + forOwn(opts, function (value, key) { + _opts[key] = value }) - endpoint = DSUtils.makePath(this.getEndpoint(parentDef, parentId, DSUtils._(parentDef, _options)), parentId, endpoint) + _(_opts, parentDef) + endpoint = makePath(self.getEndpoint(parentDef, parentId, _opts, parentId, endpoint)) + return false } } - }, this) + }) return endpoint - } + }, - getPath (method, resourceConfig, id, options) { - let _this = this - options = options || {} - if (isString(options.urlPath)) { - return makePath.apply(DSUtils, [options.basePath || _this.defaults.basePath || resourceConfig.basePath, options.urlPath]) - } else { - let args = [ - options.basePath || _this.defaults.basePath || resourceConfig.basePath, - this.getEndpoint(resourceConfig, (isString(id) || isNumber(id) || method === 'create') ? id : null, options) - ] - if (method === 'find' || method === 'update' || method === 'destroy') { - args.push(id) - } - return makePath.apply(DSUtils, args) + /** + * @name HttpAdapter#getPath + * @method + * @param {string} method TODO + * @param {Object} mapper TODO + * @param {(string|number)?} id TODO + * @param {Object} opts Configuration options. + */ + getPath (method, mapper, id, opts) { + const self = this + opts || (opts = {}) + const args = [ + opts.basePath === undefined ? (mapper.basePath === undefined ? self.basePath : mapper.basePath) : opts.basePath, + self.getEndpoint(mapper, (isString(id) || isNumber(id) || method === 'create') ? id : null, opts) + ] + if (method === 'find' || method === 'update' || method === 'destroy') { + args.push(id) } - } + return makePath.apply(utils, args) + }, - HTTP (config) { - let _this = this - let start = new Date() + /** + * Make an Http request. + * + * @name HttpAdapter#HTTP + * @method + * @param {Object} config Request configuration options. + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + HTTP (config, opts) { + const self = this + const start = new Date() + opts || (opts = {}) config = copy(config) - config = deepMixIn(config, _this.defaults.httpConfig) - if (!('verbsUseBasePath' in config)) { - config.verbsUseBasePath = _this.defaults.verbsUseBasePath - } - if (!config.urlOverride && config.verbsUseBasePath) { - config.url = makePath(config.basePath || _this.defaults.basePath, config.url) - } - if (_this.defaults.forceTrailingSlash && config.url[config.url.length - 1] !== '/' && !config.urlOverride) { + config = deepMixIn(config, self.httpConfig) + if (self.forceTrailingSlash && config.url[config.url.length - 1] !== '/') { config.url += '/' } config.method = config.method.toUpperCase() - let suffix = config.suffix || _this.defaults.suffix - if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix && !config.urlOverride) { + const suffix = config.suffix || opts.suffix || self.suffix + if (suffix && config.url.substr(config.url.length - suffix.length) !== suffix) { config.url += suffix } - // logs the HTTP response - function logResponse (data, isRejection) { - data = data || {} - // examine the data object - if (data instanceof Error) { - // log the Error object - _this.defaults.error(`FAILED: ${data.message || 'Unknown Error'}`, data) - return DSUtils.Promise.reject(data) - } else if (typeof data === 'object') { - let str = `${start.toUTCString()} - ${config.method} ${config.url} - ${data.status} ${(new Date().getTime() - start.getTime())}ms` - - if (data.status >= 200 && data.status < 300 && !isRejection) { - if (_this.defaults.log) { - _this.defaults.log(str, data) - } - return data - } else { - if (_this.defaults.error) { - _this.defaults.error(`FAILED: ${str}`, data) - } - return DSUtils.Promise.reject(data) + function logResponse (data) { + const 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 { - // unknown type for 'data' that is not an Object or Error - _this.defaults.error('FAILED', data) - return DSUtils.Promise.reject(data) + if (self.error) { + self.error(`'FAILED: ${str}`, data) + } + return reject(data) } } @@ -270,142 +974,399 @@ class DSHttpAdapter { throw new Error('You have not configured this adapter with an http library!') } - return this.http(config).then(logResponse, function (data) { - return logResponse(data, true) + return 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 resolve(self.afterHTTP(config, opts, response)).then(function (_response) { + return _response || response + }) }) - } + }, - GET (url, config) { - config = config || {} - config.method = config.method || 'get' - config.urlOverride = !!config.url - config.url = config.url || url - return this.HTTP(config) - } + /** + * Log the provided arguments at the specified leve. + * + * @name HttpAdapter#log + * @method + * @param {string} level Log level. + * @param {...*} [args] Arguments to log. + */ + log (level, ...args) { + if (level && !args.length) { + args.push(level) + level = 'debug' + } + if (level === 'debug' && !this.debug) { + return + } + const prefix = `${level.toUpperCase()}: (HttpAdapter)` + if (console[level]) { + console[level](prefix, ...args) + } else { + console.log(prefix, ...args) + } + }, - POST (url, attrs, config) { - config = config || {} + /** + * TODO + * + * @name HttpAdapter#POST + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + POST (url, data, config, opts) { + const self = this + let op + config || (config = {}) + opts || (opts = {}) + config.url = url || config.url + config.data = data || config.data config.method = config.method || 'post' - config.urlOverride = !!config.url - config.url = config.url || url - config.data = config.data || attrs - return this.HTTP(config) - } - PUT (url, attrs, config) { - config = config || {} - config.method = config.method || 'put' - config.urlOverride = !!config.url - config.url = config.url || url - config.data = config.data || attrs - return this.HTTP(config) - } + // beforePOST lifecycle hook + op = opts.op = 'beforePOST' + return resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return isUndefined(_response) ? response : _response + }) + }) + }, - DEL (url, config) { - config = config || {} - config.method = config.method || 'delete' - config.urlOverride = !!config.url - config.url = config.url || url - return this.HTTP(config) - } + /** + * TODO + * + * @name HttpAdapter#PUT + * @method + * @param {*} url TODO + * @param {Object} data TODO + * @param {Object} config TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + PUT (url, data, config, opts) { + const self = this + let op + config || (config = {}) + opts || (opts = {}) + config.url = url || config.url + config.data = data || config.data + config.method = config.method || 'put' - find (resourceConfig, id, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - options.params = _this.defaults.queryTransform(resourceConfig, options.params) - return _this.GET( - _this.getPath('find', resourceConfig, id, options), - options - ).then((data) => { - let item = (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data) - return !item ? DSUtils.Promise.reject(new Error('Not Found!')) : item + // beforePUT lifecycle hook + op = opts.op = 'beforePUT' + return resolve(self[op](url, data, config, opts)).then(function (_config) { + // Allow re-assignment from lifecycle hook + config = 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 resolve(self[op](url, data, config, opts, response)).then(function (_response) { + // Allow re-assignment from lifecycle hook + return isUndefined(_response) ? response : _response + }) }) - } + }, - findAll (resourceConfig, params, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params) - deepMixIn(options.params, params) + /** + * TODO + * + * @name HttpAdapter#queryTransform + * @method + * @param {Object} mapper TODO + * @param {*} params TODO + * @param {*} opts TODO + * @return {*} Transformed params. + */ + queryTransform (mapper, params, opts) { + opts || (opts = {}) + if (isFunction(opts.queryTransform)) { + return opts.queryTransform(mapper, params, opts) } - return _this.GET( - _this.getPath('findAll', resourceConfig, params, options), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) - } - - create (resourceConfig, attrs, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - options.params = _this.defaults.queryTransform(resourceConfig, options.params) - return _this.POST( - _this.getPath('create', resourceConfig, attrs, options), - options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) - } + if (isFunction(mapper.queryTransform)) { + return mapper.queryTransform(mapper, params, opts) + } + return params + }, - update (resourceConfig, id, attrs, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - options.params = _this.defaults.queryTransform(resourceConfig, options.params) - return _this.PUT( - _this.getPath('update', resourceConfig, id, options), - options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) - } + /** + * 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 (err, config, opts) { + return reject(err) + }, - updateAll (resourceConfig, attrs, params, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params) - deepMixIn(options.params, params) + /** + * TODO + * + * @name HttpAdapter#serialize + * @method + * @param {Object} mapper TODO + * @param {Object} data TODO + * @param {*} opts TODO + * @return {*} Serialized data. + */ + serialize (mapper, data, opts) { + opts || (opts = {}) + if (isFunction(opts.serialize)) { + return opts.serialize(mapper, data, opts) } - return this.PUT( - _this.getPath('updateAll', resourceConfig, attrs, options), - options.serialize ? options.serialize(resourceConfig, attrs) : _this.defaults.serialize(resourceConfig, attrs), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) - } + if (isFunction(mapper.serialize)) { + return mapper.serialize(mapper, data, opts) + } + return data + }, - destroy (resourceConfig, id, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - options.params = _this.defaults.queryTransform(resourceConfig, options.params) - return _this.DEL( - _this.getPath('destroy', resourceConfig, id, options), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) + /** + * TODO + * + * @name HttpAdapter#update + * @method + * @param {Object} mapper TODO + * @param {*} id TODO + * @param {*} props TODO + * @param {Object} [opts] Configuration options. + * @return {Promise} + */ + update (mapper, id, props, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeUpdate lifecycle hook + op = opts.op = 'beforeUpdate' + return resolve(self[op](mapper, id, props, opts)).then(function () { + op = opts.op = 'update' + self.dbg(op, mapper, id, props, opts) + return self.PUT( + self.getPath('update', mapper, id, opts), + self.serialize(mapper, props, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterUpdate lifecycle hook + op = opts.op = 'afterUpdate' + return resolve(self[op](mapper, id, props, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * 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 (mapper, props, query, opts) { + const self = this + let op + query || (query = {}) + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + deepMixIn(opts.params, query) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeUpdateAll lifecycle hook + op = opts.op = 'beforeUpdateAll' + return resolve(self[op](mapper, props, query, opts)).then(function () { + op = opts.op = 'updateAll' + self.dbg(op, mapper, props, query, opts) + return self.PUT( + self.getPath('updateAll', mapper, null, opts), + self.serialize(mapper, props, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterUpdateAll lifecycle hook + op = opts.op = 'afterUpdateAll' + return resolve(self[op](mapper, props, query, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) + }, + + /** + * 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 (mapper, records, opts) { + const self = this + let op + opts = opts ? copy(opts) : {} + opts.params || (opts.params = {}) + opts.params = self.queryTransform(mapper, opts.params, opts) + opts.suffix = isUndefined(opts.suffix) ? mapper.suffix : opts.suffix + + // beforeUpdateMany lifecycle hook + op = opts.op = 'beforeUpdateMany' + return resolve(self[op](mapper, records, opts)).then(function () { + op = opts.op = 'updateMany' + self.dbg(op, mapper, records, opts) + return self.PUT( + self.getPath('updateMany', mapper, null, opts), + self.serialize(mapper, records, opts), + opts + ) + }).then(function (response) { + return self.deserialize(mapper, response, opts) + }).then(function (data) { + // afterUpdateMany lifecycle hook + op = opts.op = 'afterUpdateMany' + return resolve(self[op](mapper, records, opts, data)).then(function (_data) { + // Allow re-assignment from lifecycle hook + return isUndefined(_data) ? data : _data + }) + }) } +}) - destroyAll (resourceConfig, params, options) { - let _this = this - options = options ? copy(options) : {} - options.suffix = options.suffix || resourceConfig.suffix - options.params = options.params || {} - if (params) { - params = _this.defaults.queryTransform(resourceConfig, params) - deepMixIn(options.params, params) +/** + * Add an Http actions to a mapper. + * + * @name HttpAdapter.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. + */ +HttpAdapter.addAction = function (name, opts) { + if (!name || !isString(name)) { + throw new TypeError('action(name[, opts]): Expected: string, Found: ' + 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 reject(err) } + mapper[name] = function (id, _opts) { + const self = this + if (isObject(id)) { + _opts = id + } + _opts = _opts || {} + let adapter = self.getAdapter(opts.adapter || self.defaultAdapter || 'http') + let config = {} + 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 { + let args = [ + _opts.basePath || self.basePath || adapter.basePath, + adapter.getEndpoint(self, isSorN(id) ? id : null, _opts) + ] + if (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 + deepMixIn(config)(_opts) + return 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 this.DEL( - _this.getPath('destroyAll', resourceConfig, params, options), - options - ).then((data) => (options.deserialize ? options.deserialize : _this.defaults.deserialize)(resourceConfig, data)) + return mapper + } +} + +/** + * Add multiple Http actions to a mapper. See {@link HttpAdapter.addAction} for + * action configuration options. + * + * @name HttpAdapter.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. + */ +HttpAdapter.addActions = function (opts) { + opts || (opts = {}) + return function (mapper) { + forOwn(mapper, function (value, key) { + HttpAdapter.addAction(key, value)(mapper) + }) + return mapper } } diff --git a/webpack.config.js b/webpack.config.js index 466ab74..fb21ce4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,13 +2,21 @@ var path = require('path') module.exports = { devtool: 'source-map', - entry: './src/index.js', + entry: { + './dist/js-data-http.js': './src/index.js' + }, output: { - filename: './dist/js-data-http.js', + filename: '[name]', libraryTarget: 'umd', library: 'HttpAdapter' }, externals: { + 'chai': { + amd: 'chai', + commonjs: 'chai', + commonjs2: 'chai', + root: 'chai' + }, 'js-data': { amd: 'js-data', commonjs: 'js-data',