UNPKG

ngx-resource-gearheart

Version:

Angular2 resource module with simple decorators. Customized by Gearheart.

1,284 lines (1,226 loc) 151 kB
(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); }