ngx-resource-gearheart
Version:
Angular2 resource module with simple decorators. Customized by Gearheart.
1,284 lines (1,226 loc) • 151 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("@angular/http"), require("@angular/core"), require("@angular/common"), require("rxjs/BehaviorSubject"), require("rxjs/Rx"));
else if(typeof define === 'function' && define.amd)
define(["@angular/http", "@angular/core", "@angular/common", "rxjs/BehaviorSubject", "rxjs/Rx"], factory);
else if(typeof exports === 'object')
exports["ngx-resource"] = factory(require("@angular/http"), require("@angular/core"), require("@angular/common"), require("rxjs/BehaviorSubject"), require("rxjs/Rx"));
else
root["ngx-resource"] = factory(root["@angular/http"], root["@angular/core"], root["@angular/common"], root["rxjs/BehaviorSubject"], root["rxjs/Rx"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_6__, __WEBPACK_EXTERNAL_MODULE_17__, __WEBPACK_EXTERNAL_MODULE_18__, __WEBPACK_EXTERNAL_MODULE_19__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 8);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_0__;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ResourceGlobalConfig_1 = __webpack_require__(3);
var Resource = (function () {
function Resource(http, injector) {
this.http = http;
this.injector = injector;
this._url = null;
this._path = null;
this._headers = null;
this._params = null;
this._data = null;
var model = this.initResultObject();
Reflect.defineMetadata('resource', this, model.constructor);
if (!!this.initStorage) {
this.storage = this.initStorage();
}
}
/**
* Get main url of the resource
* @returns {string|Promise<string>}
*/
Resource.prototype.getUrl = function (methodOptions) {
return this._url || this._getUrl(methodOptions) || ResourceGlobalConfig_1.ResourceGlobalConfig.url || '';
};
/**
* Set resource url
* @param url
*/
Resource.prototype.setUrl = function (url) {
this._url = url;
};
/**
* Get path of the resource
* @returns {string|Promise<string>}
*/
Resource.prototype.getPath = function (methodOptions) {
return this._path || this._getPath(methodOptions) || ResourceGlobalConfig_1.ResourceGlobalConfig.path || '';
};
/**
* Set resource path
* @param path
*/
Resource.prototype.setPath = function (path) {
this._path = path;
};
/**
* Get headers
* @returns {any|Promise<any>}
*/
Resource.prototype.getHeaders = function (methodOptions) {
return this._headers || this._getHeaders(methodOptions) || ResourceGlobalConfig_1.ResourceGlobalConfig.headers || {};
};
/**
* Set resource headers
* @param headers
*/
Resource.prototype.setHeaders = function (headers) {
this._headers = headers;
};
/**
* Get default params
* @returns {any|Promise<any>|{}}
*/
Resource.prototype.getParams = function (methodOptions) {
return this._params || this._getParams(methodOptions) || ResourceGlobalConfig_1.ResourceGlobalConfig.params || {};
};
/**
* Set default resource params
* @param params
*/
Resource.prototype.setParams = function (params) {
this._params = params;
};
/**
* Get default data
* @returns {any|Promise<any>|{}}
*/
Resource.prototype.getData = function (methodOptions) {
return this._data || this._getData(methodOptions) || ResourceGlobalConfig_1.ResourceGlobalConfig.data || {};
};
/**
* Set default resource params
* @param data
*/
Resource.prototype.setData = function (data) {
this._data = data;
};
/**
* That is called before executing request
* @param req
*/
Resource.prototype.requestInterceptor = function (req, methodOptions) {
return req;
};
/**
* Request observable interceptor
* @param observable
* @returns {Observable<any>}
*/
Resource.prototype.responseInterceptor = function (observable, req, methodOptions) {
return observable.map(function (res) { return res._body ? res.json() : null; });
};
Resource.prototype.removeTrailingSlash = function () {
return true;
};
Resource.prototype.initResultObject = function () {
return {};
};
Resource.prototype.map = function (item) {
return item;
};
Resource.prototype.filter = function (item) {
return true;
};
Resource.prototype.getResourceOptions = function () {
return null;
};
Resource.prototype.createModel = function () {
var ret = this.initResultObject();
ret.$resource = this;
return ret;
};
Resource.prototype._request = function (req, methodOptions) {
if (methodOptions === void 0) { methodOptions = {}; }
var requestObservable = this.http.request(req);
// noinspection TypeScriptValidateTypes
return methodOptions.responseInterceptor ?
methodOptions.responseInterceptor.bind(this)(requestObservable, req, methodOptions) :
this.responseInterceptor(requestObservable, req, methodOptions);
};
Resource.prototype._getUrl = function (methodOptions) {
return null;
};
Resource.prototype._getPath = function (methodOptions) {
return null;
};
Resource.prototype._getHeaders = function (methodOptions) {
return null;
};
Resource.prototype._getParams = function (methodOptions) {
return null;
};
Resource.prototype._getData = function (methodOptions) {
return null;
};
return Resource;
}());
Resource.instance = undefined;
exports.Resource = Resource;
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var http_1 = __webpack_require__(0);
var Rx_1 = __webpack_require__(19);
var ResourceGlobalConfig_1 = __webpack_require__(3);
var StorageAction_1 = __webpack_require__(5);
function ResourceAction(methodOptions) {
methodOptions = methodOptions || {};
if (methodOptions.method === undefined) {
methodOptions.method = http_1.RequestMethod.Get;
}
return function (target, propertyKey) {
target[propertyKey] = function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var data = args.length ? args[0] : null;
var params = args.length > 1 ? args[1] : null;
var callback = args.length > 2 ? args[2] : null;
if (typeof data === 'function') {
callback = data;
data = null;
}
else if (typeof params === 'function') {
callback = params;
params = null;
}
var resourceOptions = this.getResourceOptions();
var mockRequest = ResourceGlobalConfig_1.ResourceGlobalConfig.mockResponses && resourceOptions.mock !== false && methodOptions.mock !== false && (!!methodOptions.mockCollection || !!resourceOptions.mockCollection);
var isGetRequest = methodOptions.method === http_1.RequestMethod.Get;
var ret = null;
var map = methodOptions.map ? methodOptions.map.bind(this) : this.map;
var filter = methodOptions.filter ? methodOptions.filter : this.filter;
var initObject = methodOptions.initResultObject ?
methodOptions.initResultObject.bind(this) : this.initResultObject;
if (methodOptions.isLazy) {
ret = {};
}
else {
if (methodOptions.isArray) {
ret = [];
}
else {
if (data && data.$resource === this) {
// Setting data to ret
ret = data;
data = data.toJSON ? data.toJSON() : toJSON(data);
}
else {
ret = initObject.bind(this)();
}
}
}
var mainDeferredSubscriber = null;
var mainObservable = null;
ret.$resolved = false;
ret.$observable = Rx_1.Observable.create(function (subscriber) {
mainDeferredSubscriber = subscriber;
}).flatMap(function () { return mainObservable; });
ret.$abortRequest = function () {
ret.$resolved = true;
};
ret.$resource = this;
function releaseMainDeferredSubscriber() {
if (mainDeferredSubscriber) {
mainDeferredSubscriber.next();
mainDeferredSubscriber.complete();
mainDeferredSubscriber = null;
}
}
if (!methodOptions.isLazy) {
ret.$observable = ret.$observable.publish();
ret.$observable.connect();
}
Promise.all([
Promise.resolve(methodOptions.url || this.getUrl(methodOptions)),
Promise.resolve(methodOptions.path || this.getPath(methodOptions)),
Promise.resolve(methodOptions.headers || this.getHeaders(methodOptions)),
Promise.resolve(methodOptions.params || this.getParams(methodOptions)),
Promise.resolve(methodOptions.data || this.getData(methodOptions))
])
.then(function (dataAll) {
if (ret.$resolved) {
mainObservable = Rx_1.Observable.create(function (observer) {
observer.next(null);
});
releaseMainDeferredSubscriber();
}
var url = dataAll[0] + dataAll[1];
var headers = new http_1.Headers(dataAll[2]);
var defPathParams = dataAll[3];
var usedPathParams = {};
var usedPathParamsValues = {};
if (!Array.isArray(data) || params) {
if (!Array.isArray(data)) {
data = Object.assign({}, dataAll[4], data);
}
var pathParams = url.match(/{([^}]*)}/g) || [];
var _loop_1 = function (i) {
var pathParam = pathParams[i];
var pathKey = pathParam.substr(1, pathParam.length - 2);
var isMandatory = pathKey[0] === '!';
if (isMandatory) {
pathKey = pathKey.substr(1);
}
var isGetOnly = pathKey[0] === ':';
if (isGetOnly) {
pathKey = pathKey.substr(1);
}
var value = getValueForPath(pathKey, defPathParams, params || data, usedPathParams);
if (isGetOnly && !params) {
delete data[pathKey];
}
if (isNullOrUndefined(value)) {
if (isMandatory) {
var consoleMsg_1 = "Mandatory " + pathParam + " path parameter is missing";
mainObservable = Rx_1.Observable.create(function (observer) {
observer.error(new Error(consoleMsg_1));
});
console.warn(consoleMsg_1);
releaseMainDeferredSubscriber();
return { value: void 0 };
}
url = url.substr(0, url.indexOf(pathParam));
return "break";
}
else {
usedPathParamsValues[pathKey] = value;
}
;
// Replacing in the url
url = url.replace(pathParam, value);
};
for (var i = 0; i < pathParams.length; i++) {
var state_1 = _loop_1(i);
if (typeof state_1 === "object")
return state_1.value;
if (state_1 === "break")
break;
}
}
// Removing double slashed from final url
url = url.replace(/\/\/+/g, '/');
if (url.startsWith('http')) {
url = url.replace(':/', '://');
}
// Remove trailing slash
if (typeof methodOptions.removeTrailingSlash === 'undefined') {
methodOptions.removeTrailingSlash = _this.removeTrailingSlash();
}
if (methodOptions.removeTrailingSlash) {
while (url[url.length - 1] === '/') {
url = url.substr(0, url.length - 1);
}
}
// Remove mapped params
for (var key in defPathParams) {
if (defPathParams[key][0] === '@') {
delete defPathParams[key];
}
}
// Default search params or data
var body = null;
var searchParams;
if (isGetRequest) {
// GET
searchParams = Object.assign({}, defPathParams, data);
}
else {
// NON GET
if (data) {
var _body = {};
if (methodOptions.rootNode) {
_body["" + methodOptions.rootNode] = data;
}
else {
_body = data;
}
body = JSON.stringify(_body);
}
searchParams = defPathParams;
}
// Setting search params
var search = !!methodOptions.queryEncoder ? new http_1.URLSearchParams('', new methodOptions.queryEncoder()) : new http_1.URLSearchParams();
if (!params) {
for (var key in searchParams) {
if (searchParams.hasOwnProperty(key) && !usedPathParams[key]) {
var value = searchParams[key];
appendSearchParams(search, key, value);
}
}
}
// Adding TS if needed
var tsName = methodOptions.addTimestamp || resourceOptions.addTimestamp;
if (tsName) {
if (tsName === true) {
tsName = 'ts';
}
search.append(tsName, '' + new Date().getTime());
}
// Removing Content-Type header if no body
if (!body) {
headers.delete('content-type');
}
// Creating request options
var requestOptions = new http_1.RequestOptions({
method: methodOptions.method,
headers: headers,
body: body,
url: url,
search: search,
withCredentials: methodOptions.withCredentials || resourceOptions.withCredentials
});
// Creating request object
var req = new http_1.Request(requestOptions);
req = methodOptions.requestInterceptor ?
methodOptions.requestInterceptor(req, methodOptions) :
_this.requestInterceptor(req, methodOptions);
if (!req) {
mainObservable = Rx_1.Observable.create(function (observer) {
observer.error(new Error('Request is null'));
});
console.warn('Request is null');
releaseMainDeferredSubscriber();
return;
}
var requestObservable;
if (mockRequest) {
var mockCollection = !!methodOptions.mockCollection ? methodOptions.mockCollection : { collection: resourceOptions.mockCollection };
var resp = null;
if (typeof mockCollection === 'function') {
resp = mockCollection(propertyKey, usedPathParamsValues, searchParams, JSON.parse(body), methodOptions.method);
}
else {
resp = getMockedResponse(mockCollection, usedPathParamsValues, searchParams, JSON.parse(body), methodOptions.method);
}
resp = new FakeResponse(resp);
requestObservable = Rx_1.Observable.from([resp]);
// noinspection TypeScriptValidateTypes
requestObservable = methodOptions.responseInterceptor ?
methodOptions.responseInterceptor.bind(_this)(requestObservable, req, methodOptions) :
_this.responseInterceptor(requestObservable, req, methodOptions);
}
else {
// Doing the request
requestObservable = _this._request(req, methodOptions);
}
if (methodOptions.isLazy) {
mainObservable = requestObservable;
}
else {
mainObservable = Rx_1.Observable.create(function (subscriber) {
var reqSubscr = requestObservable.subscribe(function (resp) {
if (resp !== null) {
if (methodOptions.isArray) {
// Expecting array
if (!Array.isArray(resp)) {
console.error('Returned data should be an array. Received', resp);
}
else {
ret.push.apply(ret, resp
.filter(filter)
.map(map)
.map(function (respItem) {
respItem.$resource = _this;
return setDataToObject(initObject.bind(respItem.$resource)(), respItem);
}));
}
}
else {
// Expecting object
if (Array.isArray(resp)) {
console.error('Returned data should be an object. Received', resp);
}
else {
if (filter(resp)) {
setDataToObject(ret, map(resp));
}
}
}
}
ret.$resolved = true;
subscriber.next(ret);
}, function (err) { return subscriber.error(err); }, function () {
ret.$resolved = true;
subscriber.complete();
if (callback) {
callback(ret);
}
});
ret.$abortRequest = function () {
if (ret.$resolved) {
return;
}
reqSubscr.unsubscribe();
ret.$resolved = true;
};
});
}
if (!!_this.storage && !!methodOptions.storageAction) {
mainObservable = mainObservable.do(function (resp) {
methodOptions.storageAction.bind(_this)(_this.storage, resp);
});
}
releaseMainDeferredSubscriber();
});
return ret;
};
if (!!methodOptions.storageAction && methodOptions.storageAction === StorageAction_1.StorageAction.LOAD) {
target.storageLoad = target[propertyKey];
}
;
};
}
exports.ResourceAction = ResourceAction;
function setDataToObject(ret, resp) {
if (ret.$setData) {
ret.$setData(resp);
}
else {
Object.assign(ret, resp);
}
return ret;
}
exports.setDataToObject = setDataToObject;
function appendSearchParams(search, key, value) {
/// Convert dates to ISO format string
if (value instanceof Date) {
search.append(key, value.toISOString());
return;
}
if (typeof value === 'object') {
switch (ResourceGlobalConfig_1.ResourceGlobalConfig.getParamsMappingType) {
case ResourceGlobalConfig_1.TGetParamsMappingType.Plain:
if (Array.isArray(value)) {
for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
var arr_value = value_1[_i];
search.append(key, arr_value);
}
}
else {
if (value && typeof value === 'object') {
/// Convert dates to ISO format string
if (value instanceof Date) {
value = value.toISOString();
}
else {
value = JSON.stringify(value);
}
}
search.append(key, value);
}
break;
case ResourceGlobalConfig_1.TGetParamsMappingType.Bracket:
/// Convert object and arrays to query params
for (var k in value) {
if (value.hasOwnProperty(k)) {
appendSearchParams(search, key + '[' + k + ']', value[k]);
}
}
break;
}
return;
}
search.append(key, value);
}
exports.appendSearchParams = appendSearchParams;
function getValueForPath(key, params, data, usedPathParams) {
if (!isNullOrUndefined(data[key]) && typeof data[key] !== 'object') {
usedPathParams[key] = true;
return data[key];
}
if (isNullOrUndefined(params[key])) {
return null;
}
if (params[key][0] === '@') {
return getValueForPath(params[key].substr(1), params, data, usedPathParams);
}
usedPathParams[key] = true;
return params[key];
}
function isNullOrUndefined(value) {
return value === null || value === undefined;
}
function toJSON(obj) {
var retObj = {};
for (var propName in obj) {
if (!(obj[propName] instanceof Function) && !(propName.charAt(0) === '$')) {
retObj[propName] = obj[propName];
}
}
return retObj;
}
var FakeResponse = (function () {
function FakeResponse(resp) {
var _this = this;
this.json = function () { return _this._resp; };
this._resp = resp;
}
Object.defineProperty(FakeResponse.prototype, "_body", {
get: function () {
return JSON.stringify(this._resp);
},
enumerable: true,
configurable: true
});
return FakeResponse;
}());
function getMockedResponse(collection, params, searchParams, data, requestMethod) {
if (requestMethod === http_1.RequestMethod.Get) {
if (Object.keys(params).length === 0) {
return collection.collection;
}
else {
if (!collection.lookupParams || Object.keys(collection.lookupParams).length === 0) {
var result = collection.collection;
var _loop_2 = function (key) {
if (params.hasOwnProperty(key)) {
result = result.filter(function (item) { return item[key] === params[key]; });
}
};
for (var key in params) {
_loop_2(key);
}
return !!result.length ? result[0] : null;
}
else {
return collection.collection.filter(function (itm) {
var result = true;
for (var key in collection.lookupParams) {
if (collection.lookupParams.hasOwnProperty(key)) {
result = result && params[key] === itm[collection.lookupParams[key]];
}
}
return result;
});
}
}
}
else if (requestMethod === http_1.RequestMethod.Post) {
collection.collection.push(data);
return data;
}
else if (requestMethod === http_1.RequestMethod.Put || requestMethod === http_1.RequestMethod.Patch) {
var result = collection.collection.find(function (item) {
for (var key in params) {
if (item[key] !== params[key]) {
return false;
}
}
return true;
});
if (!!result) {
Object.assign(result, data);
return result;
}
}
else if (requestMethod === http_1.RequestMethod.Delete) {
var resultIdx = collection.collection.findIndex(function (item) {
for (var key in params) {
if (item[key] !== params[key]) {
return false;
}
}
return true;
});
collection.collection.splice(resultIdx, 1);
}
return null;
}
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var TGetParamsMappingType;
(function (TGetParamsMappingType) {
TGetParamsMappingType[TGetParamsMappingType["Plain"] = 0] = "Plain";
TGetParamsMappingType[TGetParamsMappingType["Bracket"] = 1] = "Bracket";
})(TGetParamsMappingType = exports.TGetParamsMappingType || (exports.TGetParamsMappingType = {}));
var ResourceGlobalConfig = (function () {
function ResourceGlobalConfig() {
}
return ResourceGlobalConfig;
}());
ResourceGlobalConfig.url = null;
ResourceGlobalConfig.path = null;
ResourceGlobalConfig.headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
ResourceGlobalConfig.params = null;
ResourceGlobalConfig.data = null;
ResourceGlobalConfig.getParamsMappingType = TGetParamsMappingType.Plain;
ResourceGlobalConfig.mockResponses = false;
exports.ResourceGlobalConfig = ResourceGlobalConfig;
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = __webpack_require__(6);
var http_1 = __webpack_require__(0);
var ResourceProviders = (function () {
function ResourceProviders() {
}
ResourceProviders.add = function (resource, subSet) {
if (subSet === void 0) { subSet = null; }
if (!subSet) {
subSet = this.mainProvidersName;
}
if (!this.providers[subSet]) {
this.providers[subSet] = [];
}
var deps = Reflect.getMetadata('design:paramtypes', resource);
if (!deps || deps.length === 0) {
deps = [http_1.Http, core_1.Injector];
}
this.providers[subSet].push({
provide: resource,
useFactory: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return new (resource.bind.apply(resource, [void 0].concat(args)))();
},
deps: deps
});
};
ResourceProviders.get = function (subSet) {
if (subSet === void 0) { subSet = null; }
if (!subSet) {
subSet = this.mainProvidersName;
}
return this.providers[subSet] || [];
};
return ResourceProviders;
}());
ResourceProviders.mainProvidersName = '__mainProviders';
ResourceProviders.providers = {
__mainProviders: []
};
exports.ResourceProviders = ResourceProviders;
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StorageAction = {
LOAD: function (storage, resp) {
storage.resultData = resp.filter(function (item) { return !!item; });
storage.forceRefresh();
},
ADD: function (storage, resp) {
storage.resultData.push(resp);
storage.forceRefresh();
},
UPDATE: function (storage, resp) {
var primaryKey = resp.$primaryKey || 'id';
var idx = storage.resultData.findIndex(function (item) { return item[primaryKey] === resp[primaryKey]; });
if (idx > -1) {
storage.resultData[idx] = resp;
storage.forceRefresh();
}
},
REMOVE: function (storage, resp) {
var primaryKey = resp.$primaryKey || 'id';
var idx = storage.resultData.findIndex(function (item) { return item[primaryKey] === resp[primaryKey]; });
if (idx > -1) {
storage.resultData.splice(idx, 1);
storage.forceRefresh();
}
},
};
/***/ }),
/* 6 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_6__;
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = __webpack_require__(6);
var common_1 = __webpack_require__(17);
var http_1 = __webpack_require__(0);
var ResourceProviders_1 = __webpack_require__(4);
__export(__webpack_require__(1));
__export(__webpack_require__(2));
__export(__webpack_require__(9));
__export(__webpack_require__(10));
__export(__webpack_require__(3));
__export(__webpack_require__(11));
__export(__webpack_require__(12));
__export(__webpack_require__(4));
__export(__webpack_require__(13));
__export(__webpack_require__(14));
__export(__webpack_require__(5));
__export(__webpack_require__(16));
var ResourceModule = ResourceModule_1 = (function () {
function ResourceModule(_injector) {
var _this = this;
this._injector = _injector;
// Create singletones for all resources
var providers = ResourceProviders_1.ResourceProviders.providers[ResourceProviders_1.ResourceProviders.mainProvidersName];
providers.forEach(function (provider) {
var ResourceType = provider.provide;
var resourceInstance = _this._injector.get(ResourceType);
ResourceType.instance = resourceInstance;
});
}
ResourceModule.forRoot = function () {
return {
ngModule: ResourceModule_1,
providers: ResourceProviders_1.ResourceProviders.providers[ResourceProviders_1.ResourceProviders.mainProvidersName]
};
};
ResourceModule.forChild = function (subSet) {
return {
ngModule: ResourceModule_1,
providers: ResourceProviders_1.ResourceProviders.providers[subSet] ? ResourceProviders_1.ResourceProviders.providers[subSet] : []
};
};
return ResourceModule;
}());
ResourceModule = ResourceModule_1 = __decorate([
core_1.NgModule({
imports: [common_1.CommonModule, http_1.HttpModule]
}),
__metadata("design:paramtypes", [core_1.Injector])
], ResourceModule);
exports.ResourceModule = ResourceModule;
var ResourceModule_1;
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(__webpack_require__(7));
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var http_1 = __webpack_require__(0);
var Resource_1 = __webpack_require__(1);
var ResourceAction_1 = __webpack_require__(2);
var ResourceCRUD = (function (_super) {
__extends(ResourceCRUD, _super);
function ResourceCRUD() {
return _super !== null && _super.apply(this, arguments) || this;
}
// Alias to save
ResourceCRUD.prototype.create = function (data, callback) {
return this.save(data, callback);
};
return ResourceCRUD;
}(Resource_1.Resource));
__decorate([
ResourceAction_1.ResourceAction({
isArray: true
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "query", void 0);
__decorate([
ResourceAction_1.ResourceAction({
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "get", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Post
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "save", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Put,
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "update", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Delete,
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "remove", void 0);
exports.ResourceCRUD = ResourceCRUD;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var http_1 = __webpack_require__(0);
var Resource_1 = __webpack_require__(1);
var ResourceAction_1 = __webpack_require__(2);
var ResourceCRUDBase = (function (_super) {
__extends(ResourceCRUDBase, _super);
function ResourceCRUDBase() {
return _super !== null && _super.apply(this, arguments) || this;
}
// Alias to save
ResourceCRUDBase.prototype.create = function (data, callback) {
return this.save(data, callback);
};
return ResourceCRUDBase;
}(Resource_1.Resource));
__decorate([
ResourceAction_1.ResourceAction({
isArray: true
}),
__metadata("design:type", Function)
], ResourceCRUDBase.prototype, "query", void 0);
__decorate([
ResourceAction_1.ResourceAction(),
__metadata("design:type", Function)
], ResourceCRUDBase.prototype, "get", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Post
}),
__metadata("design:type", Function)
], ResourceCRUDBase.prototype, "save", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Put
}),
__metadata("design:type", Function)
], ResourceCRUDBase.prototype, "update", void 0);
__decorate([
ResourceAction_1.ResourceAction({
method: http_1.RequestMethod.Delete
}),
__metadata("design:type", Function)
], ResourceCRUDBase.prototype, "remove", void 0);
exports.ResourceCRUDBase = ResourceCRUDBase;
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ResourceModel = (function () {
function ResourceModel() {
this.$cachedRelated = {};
this.$primaryKey = 'id';
var resource = Reflect.getMetadata('resource', this.constructor);
this.$resource = !!resource && resource.constructor.instance;
}
ResourceModel.create = function (data, commit) {
if (data === void 0) { data = {}; }
if (commit === void 0) { commit = true; }
console.error('Model static create is not available anymore. Please use new YourModel() instead');
};
ResourceModel.prototype.$setData = function (data) {
Object.assign(this, data);
return this;
};
ResourceModel.prototype.$save = function () {
if (this.isNew()) {
return this.$create();
}
else {
return this.$update();
}
};
ResourceModel.prototype.$create = function () {
return this.$resource_method('save');
};
ResourceModel.prototype.$update = function () {
return this.$resource_method('update');
};
ResourceModel.prototype.$remove = function () {
return this.$resource_method('remove');
};
ResourceModel.prototype.toJSON = function () {
var retObj = {};
for (var propName in this) {
if (!(this[propName] instanceof Function) && !(propName.charAt(0) === '$')) {
retObj[propName] = this[propName];
}
}
return retObj;
};
ResourceModel.prototype.isNew = function () {
return !this[this.$primaryKey];
};
ResourceModel.prototype.$resource_method = function (methodName) {
if (!this.$resource) {
console.error("Your Resource is not set. Please use resource.createModel() method to create model.");
return this;
}
if (!this.$resource[methodName]) {
console.error("Your Resource has no implemented " + methodName + " method.");
return this;
}
this.$resource[methodName](this);
return this;
};
return ResourceModel;
}());
exports.ResourceModel = ResourceModel;
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ResourceProviders_1 = __webpack_require__(4);
function ResourceParams(params) {
if (params === void 0) { params = {}; }
return function (target) {
target.prototype.getResourceOptions = function () {
return params;
};
if (params.add2Provides !== false) {
ResourceProviders_1.ResourceProviders.add(target, params.providersSubSet);
}
if (typeof params.removeTrailingSlash !== 'undefined') {
target.prototype.removeTrailingSlash = function () {
return !!params.removeTrailingSlash;
};
}
if (params.url) {
target.prototype._getUrl = function () {
return params.url;
};
}
if (params.path) {
target.prototype._getPath = function () {
return params.path;
};
}
if (params.headers) {
target.prototype._getHeaders = function () {
return params.headers;
};
}
if (params.params) {
target.prototype._getParams = function () {
return params.params;
};
}
if (params.data) {
target.prototype._getData = function () {
return params.data;
};
}
};
}
exports.ResourceParams = ResourceParams;
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var BehaviorSubject_1 = __webpack_require__(18);
var ResourceStorage = (function () {
function ResourceStorage(resource, queryParams) {
this.resource = resource;
this.queryParams = queryParams;
this._iterationPointer = 0;
this.resultData = [];
this.queryParams = queryParams || {};
this.result = Object.assign(this.resultData, { $load: this.load.bind(this), $resolved: false });
this._resultSubject = new BehaviorSubject_1.BehaviorSubject(this.result);
this.result.$observable = this._resultSubject.asObservable();
this.result.$resource = this.resource;
this.load();
}
ResourceStorage.prototype.load = function (args) {
var qp = !!args ? args : this.queryParams;
var action = this.resource.storageLoad;
if (!!action) {
action.bind(this.resource)(qp);
}
else {
throw "Storage LOAD action is not defined";
}
};
ResourceStorage.prototype.forceRefresh = function () {
this.result = Object.assign([], this.result);
Object.assign(this.result, this.resultData);
this.result.$resolved = true;
this._iterationPointer = 0;
this._resultSubject.next(this.result);
};
return ResourceStorage;
}());
exports.ResourceStorage = ResourceStorage;
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function SelectStorage(resource, params) {
return function (target, propertyKey) {
var nativeInit = target.ngOnInit;
target.ngOnInit = function () {
if (!!nativeInit) {
nativeInit.bind(this)();
}
var storage = resource.instance.storage;
storage._resultSubject.subscribe(function (result) {
target[propertyKey] = result;
});
};
};
}
exports.SelectStorage = SelectStorage;
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function ForeignKey(params) {
params.resourceGetAction = !!params.resourceGetAction ? params.resourceGetAction : 'get';
return function (target, propertyKey) {
function getForeignFromStorage(id, storage) {
var foreignModel = storage.resultData.find(function (item) { return item[item.$primaryKey] === id; });
if (!!foreignModel) {
return foreignModel;
}
}
function getForeignFromResource(id, resource) {
var action = resource[params.resourceGetAction];
if (!!action) {
var queryParams = {};
queryParams[(new params.target()).$primaryKey] = id;
return action.bind(resource)(queryParams);
}