@darwino/darwino
Version:
A set of Javascript classes and utilities
79 lines (66 loc) • 1.63 kB
JavaScript
/*
* (c) Copyright Darwino Inc. 2014-2017.
*/
import queryString from 'query-string';
import {fetchJson} from './Fetch';
/*
* JSON store query builder
*/
export default class Jsql {
constructor() {
this._params = {};
}
_stringify(s) {
return typeof s==='object' ? JSON.stringify(s) : s;
}
database(database) {
this.database = database;
return this;
}
queryParams(params) {
if(params) {
for(let k in params) {
if(params.hasOwnProperty(k)) {
if(params[k]) {
this._params[k] = this._stringify(params[k])
} else {
delete this._params[k];
}
}
}
}
return this;
}
name(name) {
return this.queryParams({name});
}
format(format) {
return this.queryParams({format});
}
query(query) {
return this.queryParams({query});
}
skip(skip) {
return this.queryParams({skip});
}
limit(limit) {
return this.queryParams({limit});
}
params(params) {
return this.queryParams({params});
}
fetch() {
let url = `$darwino-jstore`
if(this.database) {
url += `/databases/${encodeURIComponent(this.database)}`
}
url += '/jsql'
// Use POST to not have length constraints
return fetchJson(
url, {
method: 'POST',
body: JSON.stringify(this._params||{})
}
);
}
}