rxrest
Version:
RxRest a reactive REST utility
193 lines • 5.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const RxRestProxyHandler_1 = require("./RxRestProxyHandler");
const RxRest_1 = require("./RxRest");
const RxRestConfiguration_1 = require("./RxRestConfiguration");
exports.RxRestConfiguration = RxRestConfiguration_1.RxRestConfiguration;
class RxRestItem extends RxRest_1.RxRest {
/**
* constructor
*
* @param {string[]} route
* @param {T} [element]
* @return {Proxy}
*/
constructor(route, element, config, metadata, suffix) {
super(config, route, metadata);
this.$element = {};
if (element !== undefined) {
this.element = element;
}
if (Array.isArray(suffix)) {
suffix = [].concat.apply([], suffix);
if (suffix.length) {
this.addRoute(suffix.join('/'));
}
}
const proxy = new Proxy(this.$element, new RxRestProxyHandler_1.RxRestProxyHandler(this));
return proxy;
}
/**
* save - POST or PUT according to $fromServer value
*
* @param {Object|URLSearchParams} [queryParams]
* @param {Object|Headers} [headers]
* @returns {Observable<RxRestItem|RxRestCollection>}
*/
save(queryParams, headers) {
this.queryParams = queryParams;
this.headers = headers;
return this.request(this.$fromServer === true ? 'PUT' : 'POST', this);
}
/**
* set element
*
* @param {T} element
*/
set element(element) {
for (let i in element) {
if (i === this.config.identifier && !this.$element[this.config.identifier]) {
this.$route.push('' + element[i]);
}
this.$element[i] = element[i];
}
}
/**
* get element
*
* @return {T}
*/
get element() {
return this.$element;
}
/**
* get plain object
*
* @return {T}
*/
plain() {
return this.element;
}
/**
* Get json string
* @return {string}
*/
json() {
return JSON.stringify(this.plain());
}
/**
* Clone
* @return {RxRestItem<T>}
*/
clone() {
let route = this.$route;
if (this.$element[this.config.identifier]) {
route = route.slice(0, this.$route.length - 1);
}
let clone = new RxRestItem(route, this.$element, this.config);
clone.$fromServer = this.$fromServer;
return clone;
}
}
exports.RxRestItem = RxRestItem;
class RxRestCollection extends RxRest_1.RxRest {
/**
* constructor
*
* @param {string[]} route
* @param {T[]|RxRestItem<T>[]]} [elements]
* @return {Proxy}
*/
constructor(route, elements, config, metadata, asIterable = true) {
super(config, route, metadata);
this.$elements = [];
if (elements !== undefined) {
this.elements = elements.map((e) => e instanceof RxRestItem ? e.clone() : new RxRestItem(this.$route, e));
}
this.$asIterable = asIterable;
const proxy = new Proxy(this.$elements, new RxRestProxyHandler_1.RxRestProxyHandler(this));
return proxy;
}
[Symbol.iterator]() {
let index = 0;
let elements = this.$elements;
return {
next() {
return index < elements.length ?
{ value: elements[index++], done: false } : { value: undefined, done: true };
}
};
}
/**
* getList - fetch a collection
*
* @param {Object|URLSearchParams} [queryParams]
* @param {Object|Headers} [headers]
* @returns {Observable<RxRestItem|RxRestCollection>}
*/
getList(queryParams, headers) {
this.queryParams = queryParams;
this.headers = headers;
return this.request('GET');
}
/**
* set elements
*
* @param {T[]} elements
*/
set elements(elements) {
this.$elements = elements;
this.length = elements.length;
}
/**
* get elements
* @return {RxRestItem<T>[]}
*/
get elements() {
return this.$elements;
}
/**
* plain
*
* @returns {T[]}
*/
plain() {
return this.elements.map(e => e.plain());
}
/**
* json
*
* @returns {String}
*/
json() {
return JSON.stringify(this.plain());
}
/**
* clone
*
* @returns {RxRestCollection}
*/
clone() {
return new RxRestCollection(this.$route, this.$elements, this.config);
}
}
exports.RxRestCollection = RxRestCollection;
class RxRest {
constructor(config) {
this.config = config;
}
one(route, id, ...suffix) {
let r = new RxRest_1.RxRest(this.config);
return r.one.call(r, route, id, suffix);
}
all(route, asIterable = true) {
let r = new RxRest_1.RxRest(this.config);
return r.all.call(r, route, asIterable);
}
fromObject(route, element, ...suffix) {
let r = new RxRest_1.RxRest(this.config);
return r.fromObject.call(r, route, element, suffix);
}
}
exports.RxRest = RxRest;
//# sourceMappingURL=index.js.map