UNPKG

aor-json-rest-client

Version:
153 lines (137 loc) 5.87 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _fakerest = require('fakerest'); var _fakerest2 = _interopRequireDefault(_fakerest); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } var GET_LIST = 'GET_LIST'; var GET_ONE = 'GET_ONE'; var GET_MANY = 'GET_MANY'; var GET_MANY_REFERENCE = 'GET_MANY_REFERENCE'; var CREATE = 'CREATE'; var UPDATE = 'UPDATE'; var DELETE = 'DELETE'; /* eslint-disable no-console */ function log(type, resource, params, response) { if (console.group) { // Better logging in Chrome console.groupCollapsed(type, resource, JSON.stringify(params)); console.log(response); console.groupEnd(); } else { console.log('FakeRest request ', type, resource, params); console.log('FakeRest response', response); } } /** * Respond to admin-on-rest REST queries using a local JavaScript object * * Useful for debugging and testing - do not use in production. * * @example * import { jsonRestClient } from 'admin-on-rest'; * const restClient = jsonRestClient({ * posts: [ * { id: 0, title: 'Hello, world!' }, * { id: 1, title: 'FooBar' }, * ], * comments: [ * { id: 0, post_id: 0, author: 'John Doe', body: 'Sensational!' }, * { id: 1, post_id: 0, author: 'Jane Doe', body: 'I agree' }, * ], * }) */ exports.default = function (data) { var loggingEnabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var restServer = new _fakerest2.default.Server(); restServer.init(data); function getResponse(type, resource, params) { switch (type) { case GET_LIST: { var _params$pagination = params.pagination, page = _params$pagination.page, perPage = _params$pagination.perPage; var _params$sort = params.sort, field = _params$sort.field, order = _params$sort.order; var query = { sort: [field, order], range: [(page - 1) * perPage, page * perPage - 1], filter: params.filter }; return { data: restServer.getAll(resource, query), total: restServer.getCount(resource, { filter: params.filter }) }; } case GET_ONE: return { data: restServer.getOne(resource, params.id, _extends({}, params)) }; case GET_MANY: return { data: restServer.getAll(resource, { filter: { id: params.ids } }) }; case GET_MANY_REFERENCE: { var _params$pagination2 = params.pagination, _page = _params$pagination2.page, _perPage = _params$pagination2.perPage; var _params$sort2 = params.sort, _field = _params$sort2.field, _order = _params$sort2.order; var _query = { sort: [_field, _order], range: [(_page - 1) * _perPage, _page * _perPage - 1], filter: _extends({}, params.filter, _defineProperty({}, params.target, params.id)) }; return { data: restServer.getAll(resource, _query), total: restServer.getCount(resource, { filter: _query.filter }) }; } case UPDATE: return { data: restServer.updateOne(resource, params.id, _extends({}, params.data)) }; case CREATE: return { data: restServer.addOne(resource, _extends({}, params.data)) }; case DELETE: return { data: restServer.removeOne(resource, params.id) }; default: return false; } } /** * @param {String} type One of the constants appearing at the top if this file, e.g. 'UPDATE' * @param {String} resource Name of the resource to fetch, e.g. 'posts' * @param {Object} params The REST request params, depending on the type * @returns {Promise} The REST response */ return function (type, resource, params) { var collection = restServer.getCollection(resource); if (!collection) { return new Promise(function (_, reject) { return reject(new Error('Undefined collection "' + resource + '"')); }); } var response = void 0; try { response = getResponse(type, resource, params); } catch (error) { return new Promise(function (_, reject) { return reject(error); }); } if (response === false) { return new Promise(function (_, reject) { return reject(new Error('Unsupported fetch action type ' + type)); }); } if (loggingEnabled) { log(type, resource, params, response); } return new Promise(function (resolve) { return resolve(response); }); }; }; module.exports = exports['default'];