-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
31 lines (28 loc) · 1.2 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const sql = new Proxy({ queryMap: {} }, {
get(target, prop, receiver) {
if (prop === 'toString') {
return () => {
let queryString = '';
for (const [key, value] of Object.entries(target.queryMap)) {
queryString += key.replace(/([a-z])([A-Z])/g, '$1 $2').toUpperCase() + ' ';
const getType = Object.prototype.toString.call(...value);
if ( getType === '[object Object]') {
queryString += '(' + Object.entries(...value).map(([k, v]) => `${k}=${typeof v === 'string' ? `'${v}'` : v}`).join(',') + ')';
} else if(getType === '[object Array]') {
queryString += '(' + Object.values(...value).join(',') + ')';
}else {
queryString += value.join(',');
}
if(value.length) {
queryString += ' ';
}
}
return queryString.trim();
}
}
return (...args) => {
target.queryMap[prop] = args;
return receiver;
};
}
});