UNPKG

1.26 kBJavaScriptView Raw
1const { safeToNumber, safeToArray } = require("./util.js");
2const { pickBy, startsWith, isNil, trimStart } = require("lodash");
3
4/**
5 * 将url中的query 转换为 json server 的query 格式
6 * @param {string} fromUrl query object from url
7 */
8function toJsonServer(fromUrl) {
9 const filters = pickBy(fromUrl, (_, key) => !startsWith(key, "_"));
10 const others = pickBy(fromUrl, (_, key) => startsWith(key, "_"));
11
12 const ret = {};
13
14 const { _limit, _offset = 0, _sort, _populate, _group, _select } = others;
15
16 if (_group) {
17 ret._group = _group;
18 }
19
20 if (_select) {
21 ret._select = _select;
22 }
23
24 // _limit, _offset 转换为 _start 和 _limit
25 if (!isNil(_limit)) {
26 ret._limit = safeToNumber(_limit);
27 ret._start = safeToNumber(_offset);
28 }
29
30 // _sort 转换为 _order, _sort
31 if (!isNil(_sort)) {
32 const sort = safeToArray(_sort);
33 const order = sort.map(s => (startsWith(s, "-") ? "desc" : "asc"));
34
35 ret._sort = sort.map(s => trimStart(s, "-")).join(",");
36 ret._order = order.join(",");
37 }
38
39 // 将 populate 转换为为 _embed
40 if (!isNil(_populate)) {
41 const embed = safeToArray(_populate);
42 ret._embed = embed.join(",");
43 }
44
45 return {
46 ...ret,
47 ...filters,
48 };
49}
50
51module.exports = toJsonServer;