UNPKG

shamjs

Version:
93 lines (89 loc) 2.83 kB
var extend = require('extend') var fuzzyMatch = require('./fuzzy') var query = function (data, request) { data = extend(true, [], data) request = request || {} if (request.query) { if (request.query.page) { request.page = request.query.page delete request.query.page } if (request.query.pageSize) { request.pageSize = request.query.pageSize delete request.query.pageSize } } request = extend(true, { pageSize: 10 }, request) var filterType = typeof request.filter if (filterType === 'object' && Array.isArray(request.filter)) { filterType = 'array' } switch(filterType) { case 'undefined': break case 'function': data = data.filter(request.filter) break default: throw new Error('node_modules/shamjs/lib/query.js: query(data, request) request.filter must be a function') } if (request.query) { var queryKeys = Object.keys(request.query) if (queryKeys.length !== 0) { data = data.filter(function (item) { return queryKeys.some(function (name, index) { var value = request.query[name] return fuzzyMatch(item[name], value) }) }) } } switch(typeof request.sort) { case 'function': data = data.sort(request.sort) break case 'string': data = data.sort(function (a, b) { var aValue = a[request.sort] var bValue = b[request.sort] var output = bValue - aValue if (isNaN(output)) { if ([aValue, bValue].sort().indexOf(aValue) === 0) { return 1 } else { return -1 } } return output }) break case 'undefined': break default: throw new Error('node_modules/shamjs/lib/query.js: query(data, request) request.sort must be a function or string') } var dataCount = data.length var pageCount = Math.ceil(dataCount/request.pageSize) var output = {} if (typeof request.page !== 'undefined') { var page = request.page if (page > pageCount) { page = pageCount } // query data var startIndex = ( page - 1) * request.pageSize var endIndex = page * request.pageSize data = data.slice(startIndex, endIndex) output.page = page output.dataCount = dataCount output.pageCount = pageCount } output.data = data return output } module.exports = query module.exports.full = require('./full') module.exports.fuzzy = require('./fuzzy')