UNPKG

rxrest

Version:

RxRest a reactive REST utility

193 lines 5.23 kB
"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