UNPKG

@darwino/darwino

Version:

A set of Javascript classes and utilities

203 lines (168 loc) 3.78 kB
/* * (c) Copyright Darwino Inc. 2014-2017. */ import { fetchJson, makeQueryString, addQueryString } from './Fetch'; import DEV_OPTIONS from "./dev"; var USE_POST = false; // For mostly debug purposes /* * JSON store cursor. */ export default class JstoreCursor { constructor() { this._params = {}; this._queryString = {}; this._process = this._process.bind(this); } _stringify(s) { return typeof s === 'object' ? JSON.stringify(s) : s; } queryString() { return this._queryString; } queryParams(params) { if (params) { for (var k in params) { if (params.hasOwnProperty(k)) { if (params[k]) { this._params[k] = this._stringify(params[k]); } else { delete this._params[k]; } } } } return this; } database(database) { this.database = database; return this; } store(store) { this.store = store; return this; } jsonTree(t) { if (t) this._queryString.jsontree = true;else delete this._queryString.jsontree; } key(key) { return this.queryParams({ key }); } query(query) { return this.queryParams({ query }); } categoryCount(categorycount) { return this.queryParams({ categorycount }); } params(params) { return this.queryParams({ params }); } orderby(orderBy, descending) { if (Array.isArray(orderBy)) { orderBy = orderBy.join(','); } var o = { orderby: orderBy }; if (descending) o.descending = true; return this.queryParams(o); } ftsearch(ftsearch) { return this.queryParams({ ftsearch }); } extract(extract) { return this.queryParams({ extract }); } aggregator(aggregator) { return this.queryParams({ aggregator }); } skip(skip) { return this.queryParams({ skip }); } limit(limit) { return this.queryParams({ limit }); } name(name) { return this.queryParams({ name }); } _process(e) { // This might be done on the server... var r = e.json; delete e.json; r.__meta = e; if (r.__meta.children) { r.__meta.children = r.__meta.children.map(this._process); } return r; } fetch() { // Use POST to not have length constraints var url = this.computeUrl('/entries', USE_POST, true); var opts = this.computeOptions(); return fetchJson(url, opts).then(json => { return json.map(this._process); }); } fetchCount() { // Use POST to not have length constraints var url = this.computeUrl('/count', USE_POST, true); var opts = this.computeOptions(); return fetchJson(url, opts).then(json => { return json.count; }); } computeUrl(urlPart, post, queryString) { var url = "".concat(DEV_OPTIONS.serverPrefix, "$darwino-jstore/databases/").concat(encodeURIComponent(this.database)); if (this.store) { url += "/stores/".concat(encodeURIComponent(this.store)); } url += urlPart; if (!post) { url = addQueryString(url, makeQueryString(this._params)); } if (queryString) { url = addQueryString(url, makeQueryString(this._queryString)); } return url; } computeOptions() { // MS Edge is picky about the presence of a body param in GET, even if empty if (USE_POST) { return { method: 'POST', body: JSON.stringify(this._params || {}) }; } else { return { method: 'GET' }; } } getDataLoader() { return (num, pagesize) => { this.skip(num * pagesize); this.limit(pagesize); return this.fetch(); }; } } //# sourceMappingURL=JstoreCursor.js.map