1 | const { safeToNumber, safeToArray } = require("./util.js");
|
2 | const { pickBy, startsWith, isNil, trimStart, endsWith } = require("lodash");
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | function 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 |
|
25 | if (!isNil(_limit)) {
|
26 | ret._limit = safeToNumber(_limit);
|
27 | ret._start = safeToNumber(_offset);
|
28 | }
|
29 |
|
30 |
|
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 |
|
40 | if (!isNil(_populate)) {
|
41 | const embed = safeToArray(_populate);
|
42 | ret._embed = embed.join(",");
|
43 | }
|
44 |
|
45 |
|
46 | for (const key in filters) {
|
47 | if (endsWith(key, "_lt") || endsWith(key, "_gt")) {
|
48 | filters[key + "e"] = filters[key];
|
49 | delete filters[key];
|
50 | }
|
51 | }
|
52 |
|
53 | return {
|
54 | ...ret,
|
55 | ...filters,
|
56 | };
|
57 | }
|
58 |
|
59 | module.exports = toJsonServer;
|