@beradrian/ngx-resource-core
Version:
Core of resource library
1,093 lines (1,038 loc) • 137 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["ngx-resource-core"] = factory();
else
root["ngx-resource-core"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
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;
/******/
/******/ // 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 = 5);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ResourceRequestBodyType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ResourceResponseBodyType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ResourceRequestMethod; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceQueryMappingMethod; });
var ResourceRequestBodyType;
(function (ResourceRequestBodyType) {
ResourceRequestBodyType[ResourceRequestBodyType["NONE"] = 0] = "NONE";
ResourceRequestBodyType[ResourceRequestBodyType["JSON"] = 1] = "JSON";
ResourceRequestBodyType[ResourceRequestBodyType["FORM"] = 2] = "FORM";
ResourceRequestBodyType[ResourceRequestBodyType["FORM_DATA"] = 3] = "FORM_DATA";
ResourceRequestBodyType[ResourceRequestBodyType["TEXT"] = 4] = "TEXT";
ResourceRequestBodyType[ResourceRequestBodyType["BLOB"] = 5] = "BLOB";
ResourceRequestBodyType[ResourceRequestBodyType["ARRAY_BUFFER"] = 6] = "ARRAY_BUFFER";
})(ResourceRequestBodyType || (ResourceRequestBodyType = {}));
var ResourceResponseBodyType;
(function (ResourceResponseBodyType) {
ResourceResponseBodyType[ResourceResponseBodyType["Text"] = 1] = "Text";
ResourceResponseBodyType[ResourceResponseBodyType["Json"] = 2] = "Json";
ResourceResponseBodyType[ResourceResponseBodyType["ArrayBuffer"] = 3] = "ArrayBuffer";
ResourceResponseBodyType[ResourceResponseBodyType["Blob"] = 4] = "Blob";
})(ResourceResponseBodyType || (ResourceResponseBodyType = {}));
var ResourceRequestMethod;
(function (ResourceRequestMethod) {
ResourceRequestMethod[ResourceRequestMethod["Get"] = 1] = "Get";
ResourceRequestMethod[ResourceRequestMethod["Post"] = 2] = "Post";
ResourceRequestMethod[ResourceRequestMethod["Put"] = 3] = "Put";
ResourceRequestMethod[ResourceRequestMethod["Delete"] = 4] = "Delete";
ResourceRequestMethod[ResourceRequestMethod["Options"] = 5] = "Options";
ResourceRequestMethod[ResourceRequestMethod["Head"] = 6] = "Head";
ResourceRequestMethod[ResourceRequestMethod["Patch"] = 7] = "Patch";
})(ResourceRequestMethod || (ResourceRequestMethod = {}));
var ResourceQueryMappingMethod;
(function (ResourceQueryMappingMethod) {
ResourceQueryMappingMethod[ResourceQueryMappingMethod["Plain"] = 1] = "Plain";
ResourceQueryMappingMethod[ResourceQueryMappingMethod["Bracket"] = 2] = "Bracket";
ResourceQueryMappingMethod[ResourceQueryMappingMethod["JQueryParamsBracket"] = 3] = "JQueryParamsBracket";
})(ResourceQueryMappingMethod || (ResourceQueryMappingMethod = {}));
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceHelper; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Declarations__ = __webpack_require__(0);
var ResourceHelper = /** @class */ (function () {
function ResourceHelper() {
}
ResourceHelper.isRunningInBrowser = function () {
if (this.isBrowser !== null) {
return this.isBrowser;
}
try {
this.isBrowser = !!window;
}
catch (e) {
this.isBrowser = false;
}
return this.isBrowser;
};
ResourceHelper.getRealTypeOf = function (data) {
if (!data) {
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].NONE;
}
if (this.isRunningInBrowser()) {
if (data instanceof FormData) {
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].FORM_DATA;
}
if (data instanceof Blob) {
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].BLOB;
}
}
if (data instanceof ArrayBuffer) {
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].ARRAY_BUFFER;
}
if (['string', 'number'].indexOf(typeof data) > -1) {
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].TEXT;
}
return __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].JSON;
};
ResourceHelper.defaults = function (dst, src) {
if (!dst) {
dst = {};
}
Object.keys(src)
.forEach(function (key) {
if (dst[key] === undefined) {
dst[key] = src[key];
}
});
return dst;
};
ResourceHelper.isNullOrUndefined = function (value) {
return value === null || value === undefined;
};
ResourceHelper.cleanData = function (obj) {
if (Array.isArray(obj)) {
return this.cleanDataArray(obj);
}
else {
return this.cleanDataObject(obj);
}
};
ResourceHelper.cleanDataArray = function (obj) {
for (var propName in obj) {
if (typeof obj[propName] === 'function' || this.cleanDataFields.indexOf(propName) > -1) {
delete obj[propName];
}
}
return obj;
};
ResourceHelper.cleanDataObject = function (obj) {
var cleanedObj = {};
for (var propName in obj) {
if (typeof obj[propName] !== 'function' && this.cleanDataFields.indexOf(propName) === -1) {
cleanedObj[propName] = obj[propName];
}
}
return cleanedObj;
};
ResourceHelper.cleanDataFields = [
'$resolved',
'$promise',
'$abort',
'$resource'
];
ResourceHelper.isBrowser = null;
return ResourceHelper;
}());
/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Resource; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Declarations__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ResourceHelper__ = __webpack_require__(1);
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var Resource = /** @class */ (function () {
function Resource(requestHandler) {
this.requestHandler = requestHandler;
this.$url = null;
this.$pathPrefix = null;
this.$path = null;
this.$headers = null;
this.$body = null;
this.$params = null;
this.$query = null;
this.constructor.instance = this;
}
/**
* Used to get url
*
* @param {IResourceAction} actionOptions
* @return {string | Promise<string>}
*/
Resource.prototype.$getUrl = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$url || actionOptions.url || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].url || '';
};
Resource.prototype.$setUrl = function (url) {
this.$url = url;
};
/**
* Used to get path prefix
*
* @param {IResourceAction} actionOptions
* @return {string | Promise<string>}
*/
Resource.prototype.$getPathPrefix = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$pathPrefix || actionOptions.pathPrefix || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].pathPrefix || '';
};
Resource.prototype.$setPathPrefix = function (path) {
this.$pathPrefix = path;
};
/**
* Used to get path
*
* @param {IResourceAction} actionOptions
* @return {string | Promise<string>}
*/
Resource.prototype.$getPath = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$path || actionOptions.path || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].path || '';
};
Resource.prototype.$setPath = function (path) {
this.$path = path;
};
/**
* Get headers.
*
* @param {IResourceAction} actionOptions
* @return {any | Promise<any>}
*/
Resource.prototype.$getHeaders = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$headers || actionOptions.headers || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].headers || {};
};
Resource.prototype.$setHeaders = function (headers) {
this.$headers = headers;
};
/**
* Get body
*
* @param {IResourceAction} actionOptions
* @return {any | Promise<any>}
*/
Resource.prototype.$getBody = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$body || actionOptions.body || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].body || {};
};
Resource.prototype.$setBody = function (body) {
this.$body = body;
};
/**
* Get path params
*
* @param {IResourceAction} actionOptions
* @return {any | Promise<any>}
*/
Resource.prototype.$getParams = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$params || actionOptions.params || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].params || {};
};
Resource.prototype.$setParams = function (params) {
this.$params = params;
};
/**
* Get query params
*
* @param {IResourceAction} actionOptions
* @return {any | Promise<any>}
*/
Resource.prototype.$getQuery = function (actionOptions) {
if (actionOptions === void 0) { actionOptions = {}; }
return this.$query || actionOptions.query || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].query || {};
};
Resource.prototype.$setQuery = function (query) {
this.$query = query;
};
/**
* Used to filter received data.
* Is applied on each element of array or object
*
* @param data
* @param {IResourceActionInner} options
* @return {boolean}
*/
Resource.prototype.$filter = function (data, options) {
if (options === void 0) { options = {}; }
return true;
};
/**
* Used to map received data
* Is applied on each element of array or object
*
* @param data
* @param {IResourceActionInner} options
* @return {any}
*/
Resource.prototype.$map = function (data, options) {
if (options === void 0) { options = {}; }
return data;
};
/**
* Used to create result object
* Is applied on each element of array or object
*
* @param data
* @param {IResourceActionInner} options
* @return {any}
*/
Resource.prototype.$resultFactory = function (data, options) {
if (options === void 0) { options = {}; }
return data || {};
};
Resource.prototype.$restAction = function (options) {
var _this = this;
this.$_setResourceActionInnerDefaults(options);
this.$_setResourceActionOptionDefaults(options);
var actionOptions = options.actionOptions;
if (actionOptions.mutateBody || options.isModel) {
options.returnData = options.actionAttributes.body;
}
if (!actionOptions.asPromise) {
options.returnData = actionOptions.expectJsonArray ? [] : actionOptions.resultFactory.call(this, null, options);
}
if (this.$_canSetInternalData(options)) {
Object.defineProperty(options.returnData, '$resolved', {
enumerable: false,
configurable: true,
writable: true,
value: false
});
Object.defineProperty(options.returnData, '$abort', {
enumerable: false,
configurable: true,
writable: true,
value: function () {
// does nothing for now
}
});
}
options.mainPromise = this.$_setResolvedOptions(options)
.then(function (o) { return _this.$_createRequestOptions(o); })
.then(function (o) {
var handlerResp = _this.requestHandler.handle(o.requestOptions);
if (o.returnData && _this.$_canSetInternalData(options)) {
o.returnData.$abort = handlerResp.abort;
}
return handlerResp.promise;
})
.then(function (resp) { return _this.$handleSuccessResponse(options, resp); })
.catch(function (resp) { return _this.$handleErrorResponse(options, resp); });
if (this.$_canSetInternalData(options)) {
Object.defineProperty(options.returnData, '$promise', {
enumerable: false,
configurable: true,
writable: true,
value: options.mainPromise
});
}
return actionOptions.asPromise ? options.mainPromise : options.returnData;
};
Resource.prototype.$handleSuccessResponse = function (options, resp) {
var _this = this;
var body = resp.body;
var actionOptions = options.actionOptions;
if (Array.isArray(body)) {
body = body
.filter(function (item) { return actionOptions.filter.call(_this, item, options); })
.map(function (item) {
item = actionOptions.map.call(_this, item, options);
return actionOptions.resultFactory.call(_this, item, options);
});
if (options.returnData) {
Array.prototype.push.apply(options.returnData, body);
body = options.returnData;
}
}
else {
if (actionOptions.filter.call(this, body, options)) {
body = actionOptions.map.call(this, body, options);
var newBody = options.returnData;
if (newBody) {
if (typeof newBody.$setData === 'function') {
newBody.$setData(body);
}
else {
Object.assign(newBody, body);
}
}
else {
newBody = actionOptions.resultFactory.call(this, body, options);
}
body = newBody;
// If it's model
if (body.$resource) {
body.$resolved = true;
body.$promise = options.mainPromise;
body.$abort = function () { return true; };
}
}
else {
body = null;
}
}
if (this.$_canSetInternalData(options)) {
options.returnData.$resolved = true;
}
if (options.actionOptions.asResourceResponse) {
resp.body = body;
body = resp;
}
if (options.actionAttributes.onSuccess) {
options.actionAttributes.onSuccess(body);
}
return body;
};
Resource.prototype.$handleErrorResponse = function (options, resp) {
if (options.returnData && this.$_canSetInternalData(options)) {
options.returnData.$resolved = true;
}
if (options.actionAttributes.onError) {
options.actionAttributes.onError(resp);
}
throw resp;
};
Resource.prototype.$setRequestOptionsUrl = function (options) {
var ro = options.requestOptions;
if (!ro.url) {
ro.url =
options.resolvedOptions.url +
options.resolvedOptions.pathPrefix +
options.resolvedOptions.path;
}
options.usedInPath = {};
var params = __WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].defaults(options.actionAttributes.params, options.resolvedOptions.params);
var pathParams = ro.url.match(/{([^}]*)}/g) || [];
for (var i = 0; i < pathParams.length; i++) {
var pathParam = pathParams[i];
var pathKey = pathParam.substr(1, pathParam.length - 2);
var isMandatory = pathKey[0] === '!';
if (isMandatory) {
pathKey = pathKey.substr(1);
}
var onlyPathParam = pathKey[0] === ':';
if (onlyPathParam) {
pathKey = pathKey.substr(1);
}
if (options.actionAttributes.query && options.actionAttributes.query === options.actionAttributes.params) {
options.usedInPath[pathKey] = true;
}
var value = params[pathKey];
if (onlyPathParam) {
delete params[pathKey];
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(value)) {
if (isMandatory) {
var consoleMsg = "Mandatory " + pathParam + " path parameter is missing";
console.warn(consoleMsg);
// shell.mainObservable = Observable.create((observer: any) => {
// observer.error(new Error(consoleMsg));
// });
//
//
// this.$_releaseMainDeferredSubscriber(shell);
throw new Error(consoleMsg);
}
ro.url = ro.url.substr(0, ro.url.indexOf(pathParam));
break;
}
// Replacing in the url
ro.url = ro.url.replace(pathParam, value);
}
// Removing double slashed from final url
ro.url = ro.url.replace(/\/\/+/g, '/');
if (ro.url.startsWith('http')) {
ro.url = ro.url.replace(':/', '://');
}
// Remove trailing slash
if (options.actionOptions.removeTrailingSlash) {
while (ro.url[ro.url.length - 1] === '/') {
ro.url = ro.url.substr(0, ro.url.length - 1);
}
}
};
Resource.prototype.$setRequestOptionsBody = function (options) {
var body = options.actionAttributes.body;
if (!body) {
return;
}
var realBodyType = __WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].getRealTypeOf(body);
var bodyOk = realBodyType === options.actionOptions.requestBodyType;
if (!bodyOk) {
if (realBodyType === __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].JSON) {
switch (options.actionOptions.requestBodyType) {
case __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].FORM_DATA:
var newBody_1 = new FormData();
Object.keys(body).forEach(function (key) {
var value = body[key];
if (body.hasOwnProperty(key) && typeof value !== 'function') {
var isArrayOfFiles = value instanceof Array && value.reduce(function (acc, elem) { return acc && elem instanceof File; }, true);
if (isArrayOfFiles) {
value.forEach(function (f, index) {
newBody_1.append(key + "[" + index + "]", f, f.name);
});
}
else if (value instanceof File) {
newBody_1.append(key, value, value.name);
}
else if (!options.actionOptions.rootNode) {
newBody_1.append(key, value);
}
}
});
if (options.actionOptions.rootNode) {
newBody_1.append(options.actionOptions.rootNode, JSON.stringify(body));
}
body = newBody_1;
bodyOk = true;
}
}
}
if (!bodyOk) {
throw new Error('Can not convert body');
}
if (!(body instanceof FormData)) {
// Add root node if needed
if (options.actionOptions.rootNode) {
var newBody = {};
newBody[options.actionOptions.rootNode] = body;
body = newBody;
}
if (typeof body === 'object' && Object.keys(body).length === 0 && !options.actionOptions.keepEmptyBody) {
return;
}
}
options.requestOptions.body = body;
};
Resource.prototype.$setRequestOptionsQuery = function (options) {
var _this = this;
var oq = options.actionAttributes.query || {};
if (options.resolvedOptions.query) {
oq = __assign({}, options.resolvedOptions.query, oq);
}
if (oq) {
options.requestOptions.query = {};
Object.keys(oq).forEach(function (key) {
if (oq.hasOwnProperty(key) && !options.usedInPath[key]) {
_this.$appendQueryParams(options.requestOptions.query, key, oq[key], options.queryMappingMethod);
}
});
}
if (options.actionOptions.addTimestamp) {
options.requestOptions.query = options.requestOptions.query || {};
this.$appendQueryParams(options.requestOptions.query, options.actionOptions.addTimestamp, Date.now().toString(10), options.queryMappingMethod);
}
};
Resource.prototype.$appendQueryParams = function (query, key, value, queryMappingMethod) {
if (value instanceof Date) {
query[key] = value.toISOString();
return;
}
if (typeof value === 'object') {
switch (queryMappingMethod) {
case __WEBPACK_IMPORTED_MODULE_0__Declarations__["a" /* ResourceQueryMappingMethod */].Plain:
if (Array.isArray(value)) {
query[key] = value.join(',');
// for (const arrValue of value) {
// query[key] = arrValue;
// }
}
else {
if (value && typeof value === 'object') {
/// Convert dates to ISO format string
if (value instanceof Date) {
value = value.toISOString();
}
else {
value = JSON.stringify(value);
}
}
query[key] = value;
}
break;
case __WEBPACK_IMPORTED_MODULE_0__Declarations__["a" /* ResourceQueryMappingMethod */].Bracket:
/// Convert object and arrays to query params
for (var k in value) {
if (value.hasOwnProperty(k)) {
this.$appendQueryParams(query, key + "[" + k + "]", value[k], queryMappingMethod);
}
}
break;
case __WEBPACK_IMPORTED_MODULE_0__Declarations__["a" /* ResourceQueryMappingMethod */].JQueryParamsBracket:
/// Convert object and arrays to query params according to $.params
for (var k in value) {
if (value.hasOwnProperty(k)) {
var path = key + "[" + k + "]";
if (Array.isArray(value) && typeof value[k] !== 'object') {
path = key + "[]";
}
this.$appendQueryParams(query, path, value[k], queryMappingMethod);
}
}
}
return;
}
query[key] = value;
};
Resource.prototype.$_setResourceActionInnerDefaults = function (options) {
var actionOptions = options.actionOptions;
// Setting default request method
if (!actionOptions.method) {
actionOptions.method = __WEBPACK_IMPORTED_MODULE_0__Declarations__["c" /* ResourceRequestMethod */].Get;
}
var actionAttributes = options.actionAttributes;
if (actionAttributes.body) {
// Setting default request content type
if (!actionOptions.requestBodyType) {
actionOptions.requestBodyType = __WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].getRealTypeOf(actionAttributes.body);
}
// Setting params and query if needed
if (actionOptions.requestBodyType === __WEBPACK_IMPORTED_MODULE_0__Declarations__["b" /* ResourceRequestBodyType */].JSON &&
typeof actionAttributes.body === 'object' && !Array.isArray(actionAttributes.body)) {
if (!actionAttributes.params) {
actionAttributes.params = actionAttributes.body;
}
options.isModel = !!actionAttributes.body.$resource;
}
}
actionAttributes.params = actionAttributes.params || {};
if (!actionAttributes.query && actionOptions.method === __WEBPACK_IMPORTED_MODULE_0__Declarations__["c" /* ResourceRequestMethod */].Get) {
actionAttributes.query = actionAttributes.params;
}
options.queryMappingMethod = actionOptions.queryMappingMethod || __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].queryMappingMethod;
};
Resource.prototype.$_setResourceActionOptionDefaults = function (options) {
var actionOptions = options.actionOptions;
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.filter)) {
actionOptions.filter = this.$filter;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.map)) {
actionOptions.map = this.$map;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.resultFactory)) {
actionOptions.resultFactory = this.$resultFactory;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.removeTrailingSlash)) {
actionOptions.removeTrailingSlash = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].removeTrailingSlash;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.withCredentials)) {
actionOptions.withCredentials = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].withCredentials;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.asPromise)) {
actionOptions.asPromise = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].asPromise;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.asResourceResponse)) {
actionOptions.asResourceResponse = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].asResourceResponse;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.responseBodyType)) {
actionOptions.responseBodyType = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].responseBodyType;
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.lean)) {
actionOptions.lean = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].lean;
if (actionOptions.mutateBody && !actionOptions.asPromise && __WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.lean)) {
actionOptions.lean = true;
}
}
if (__WEBPACK_IMPORTED_MODULE_2__ResourceHelper__["a" /* ResourceHelper */].isNullOrUndefined(actionOptions.addTimestamp)) {
actionOptions.addTimestamp = __WEBPACK_IMPORTED_MODULE_1__ResourceGlobalConfig__["a" /* ResourceGlobalConfig */].addTimestamp;
if (actionOptions.addTimestamp && typeof actionOptions.addTimestamp !== 'string') {
actionOptions.addTimestamp = 'ts';
}
}
};
Resource.prototype.$_setResolvedOptions = function (options) {
return Promise.all([
this.$getUrl(options.actionOptions),
this.$getPathPrefix(options.actionOptions),
this.$getPath(options.actionOptions),
this.$getHeaders(options.actionOptions),
this.$getBody(options.actionOptions),
this.$getParams(options.actionOptions),
this.$getQuery(options.actionOptions)
])
.then(function (resolvedMain) {
options.resolvedOptions = {};
var r = options.resolvedOptions;
r.url = resolvedMain[0], r.pathPrefix = resolvedMain[1], r.path = resolvedMain[2], r.headers = resolvedMain[3], r.body = resolvedMain[4], r.params = resolvedMain[5], r.query = resolvedMain[6];
return options;
});
};
Resource.prototype.$_createRequestOptions = function (options) {
options.requestOptions = {};
// Step 1 set main
options.requestOptions.method = options.actionOptions.method;
options.requestOptions.headers = options.resolvedOptions.headers;
options.requestOptions.withCredentials = options.actionOptions.withCredentials;
options.requestOptions.responseBodyType = options.actionOptions.responseBodyType;
options.requestOptions.requestBodyType = options.actionOptions.requestBodyType;
// Step 2 create url
this.$setRequestOptionsUrl(options);
// Step 3 create body
this.$setRequestOptionsBody(options);
// Step 4 set query params
this.$setRequestOptionsQuery(options);
return options;
};
Resource.prototype.$_canSetInternalData = function (options) {
return options.returnData && (!options.actionOptions.lean || options.isModel);
};
return Resource;
}());
/***/ }),
/* 3 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceGlobalConfig; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Declarations__ = __webpack_require__(0);
var ResourceGlobalConfig = /** @class */ (function () {
function ResourceGlobalConfig() {
}
ResourceGlobalConfig.url = null;
ResourceGlobalConfig.pathPrefix = null;
ResourceGlobalConfig.path = null;
ResourceGlobalConfig.headers = null;
ResourceGlobalConfig.body = null;
ResourceGlobalConfig.params = null;
ResourceGlobalConfig.query = null;
ResourceGlobalConfig.removeTrailingSlash = true;
ResourceGlobalConfig.addTimestamp = false;
ResourceGlobalConfig.withCredentials = false;
ResourceGlobalConfig.lean = null;
ResourceGlobalConfig.asPromise = true;
// static toObservable: boolean = null;
ResourceGlobalConfig.asResourceResponse = false;
ResourceGlobalConfig.responseBodyType = __WEBPACK_IMPORTED_MODULE_0__Declarations__["d" /* ResourceResponseBodyType */].Json;
ResourceGlobalConfig.queryMappingMethod = __WEBPACK_IMPORTED_MODULE_0__Declarations__["a" /* ResourceQueryMappingMethod */].Plain;
return ResourceGlobalConfig;
}());
/***/ }),
/* 4 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = ResourceAction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Declarations__ = __webpack_require__(0);
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function ResourceAction(methodOptions) {
methodOptions = methodOptions || {};
if (methodOptions.method === undefined) {
methodOptions.method = __WEBPACK_IMPORTED_MODULE_0__Declarations__["c" /* ResourceRequestMethod */].Get;
}
return function (target, propertyKey) {
target[propertyKey] = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var callbacks = args.filter(function (arg) { return typeof arg === 'function'; });
var data = args.filter(function (arg) { return typeof arg !== 'function'; });
var body = data[0];
var query = data[1];
var params = data[2];
var onSuccess = callbacks[0];
var onError = callbacks[1];
//tslint:disable-next-line:no-invalid-this
var actionOptions = __assign({}, this.getResourceOptions(), methodOptions);
//tslint:disable-next-line:no-invalid-this
return this.$restAction({ actionAttributes: { body: body, query: query, params: params, onSuccess: onSuccess, onError: onError }, actionOptions: actionOptions });
};
};
}
/***/ }),
/* 5 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_Declarations__ = __webpack_require__(0);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceRequestBodyType", function() { return __WEBPACK_IMPORTED_MODULE_0__src_Declarations__["b"]; });
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceResponseBodyType", function() { return __WEBPACK_IMPORTED_MODULE_0__src_Declarations__["d"]; });
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceRequestMethod", function() { return __WEBPACK_IMPORTED_MODULE_0__src_Declarations__["c"]; });
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceQueryMappingMethod", function() { return __WEBPACK_IMPORTED_MODULE_0__src_Declarations__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_Resource__ = __webpack_require__(2);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "Resource", function() { return __WEBPACK_IMPORTED_MODULE_1__src_Resource__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ResourceAction__ = __webpack_require__(4);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceAction", function() { return __WEBPACK_IMPORTED_MODULE_2__src_ResourceAction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ResourceGlobalConfig__ = __webpack_require__(3);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceGlobalConfig", function() { return __WEBPACK_IMPORTED_MODULE_3__src_ResourceGlobalConfig__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ResourceHandler__ = __webpack_require__(6);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceHandler", function() { return __WEBPACK_IMPORTED_MODULE_4__src_ResourceHandler__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_ResourceHelper__ = __webpack_require__(1);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceHelper", function() { return __WEBPACK_IMPORTED_MODULE_5__src_ResourceHelper__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_ResourceModel__ = __webpack_require__(7);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceModel", function() { return __WEBPACK_IMPORTED_MODULE_6__src_ResourceModel__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_ResourceParams__ = __webpack_require__(8);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceParams", function() { return __WEBPACK_IMPORTED_MODULE_7__src_ResourceParams__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_ResourceCommon_ResourceCRUD__ = __webpack_require__(9);
/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceCRUD", function() { return __WEBPACK_IMPORTED_MODULE_8__src_ResourceCommon_ResourceCRUD__["a"]; });
/***/ }),
/* 6 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceHandler; });
var ResourceHandler = /** @class */ (function () {
function ResourceHandler() {
}
return ResourceHandler;
}());
/***/ }),
/* 7 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceModel; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ResourceHelper__ = __webpack_require__(1);
var ResourceModel = /** @class */ (function () {
function ResourceModel() {
this.$resource = null;
this.$resolved = true;
this.$promise = null;
}
ResourceModel.get = function (id) {
return this.getInstance()[this.methodGet]({ id: id });
};
ResourceModel.query = function (query) {
return this.getInstance()[this.methodQuery](query);
};
ResourceModel.remove = function (id) {
return this.getInstance()[this.methodRemove]({ id: id });
};
ResourceModel.getInstance = function () {
if (!this.resourceInstance) {
var model = (new this());
if (!model.$resource) {
throw new Error('Your resource is not defined');
}
if (!model.$resource.instance) {
throw new Error('Your resource is not created (inject it somewhere)');
}
this.resourceInstance = (new this()).$resource.instance;
}
return this.resourceInstance;
};
ResourceModel.prototype.$setData = function (data) {
Object.assign(this, data);
return this;
};
ResourceModel.prototype.$save = function (query, params) {
if (this.isNew()) {
return this.$create(query, params);
}
else {
return this.$update(query, params);
}
};
ResourceModel.prototype.$create = function (query, params) {
return this.$executeResourceMethod(this.constructor.methodCreate, query, params);
};
ResourceModel.prototype.$update = function (query, params) {
return this.$executeResourceMethod(this.constructor.methodUpdate, query, params);
};
ResourceModel.prototype.$remove = function (query, params) {
return this.$executeResourceMethod(this.constructor.methodRemove, query, params);
};
ResourceModel.prototype.toJSON = function () {
return __WEBPACK_IMPORTED_MODULE_0__ResourceHelper__["a" /* ResourceHelper */].cleanData(this);
};
ResourceModel.prototype.isNew = function () {
return !this['id'];
};
ResourceModel.prototype.$getResourceWithMethodCheck = function (methodName) {
if (!this.$resource) {
console.error("Your Resource is not defined");
return null;
}
var restInstance = this.$resource.instance;
if (!restInstance) {
console.error("Your Resource is not defined or not created");
return null;
}
if (!restInstance[methodName]) {
console.error("Your Resource has no implemented " + methodName + " method.");
return null;
}
return restInstance;
};
ResourceModel.prototype.$executeResourceMethod = function (methodName, query, params) {
var resource = this.$getResourceWithMethodCheck(methodName);
if (resource) {
resource[methodName](this, query, params);
}
return this;
};
ResourceModel.resourceInstance = null;
ResourceModel.methodQuery = 'query';
ResourceModel.methodGet = 'get';
ResourceModel.methodCreate = 'create';
ResourceModel.methodUpdate = 'update';
ResourceModel.methodRemove = 'remove';
return ResourceModel;
}());
/***/ }),
/* 8 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = ResourceParams;
function ResourceParams(params) {
if (params === void 0) { params = {}; }
return function (target) {
target.prototype.getResourceOptions = function () {
return params;
};
};
}
/***/ }),
/* 9 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceCRUD; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Resource__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ResourceAction__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Declarations__ = __webpack_require__(0);
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);
};
var ResourceCRUD = /** @class */ (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);
};
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_1__ResourceAction__["a" /* ResourceAction */])(),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "query", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_1__ResourceAction__["a" /* ResourceAction */])({
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "get", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_1__ResourceAction__["a" /* ResourceAction */])({
method: __WEBPACK_IMPORTED_MODULE_2__Declarations__["c" /* ResourceRequestMethod */].Post
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "save", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_1__ResourceAction__["a" /* ResourceAction */])({
method: __WEBPACK_IMPORTED_MODULE_2__Declarations__["c" /* ResourceRequestMethod */].Put,
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "update", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_1__ResourceAction__["a" /* ResourceAction */])({
method: __WEBPACK_IMPORTED_MODULE_2__Declarations__["c" /* ResourceRequestMethod */].Delete,
path: '/{!id}'
}),
__metadata("design:type", Function)
], ResourceCRUD.prototype, "remove", void 0);
return ResourceCRUD;
}(__WEBPACK_IMPORTED_MODULE_0__Resource__["a" /* Resource */]));
/***/ })
/******/ ]);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWN