@kkoehn/ngx-resource-core
Version:
Core of resource library
1 lines • 89.8 kB
Source Map (JSON)
{"version":3,"file":"kkoehn-ngx-resource-core.mjs","sources":["../../../../projects/ngx-resource/core/src/lib/Declarations.ts","../../../../projects/ngx-resource/core/src/lib/ResourceGlobalConfig.ts","../../../../projects/ngx-resource/core/src/lib/ResourceHelper.ts","../../../../projects/ngx-resource/core/src/lib/ResourceHandler.ts","../../../../projects/ngx-resource/core/src/lib/ResourceHandlerNoop.ts","../../../../projects/ngx-resource/core/src/lib/ResourceModule.ts","../../../../projects/ngx-resource/core/src/lib/Resource.ts","../../../../projects/ngx-resource/core/src/lib/ResourceAction.ts","../../../../projects/ngx-resource/core/src/lib/ResourceModel.ts","../../../../projects/ngx-resource/core/src/lib/ResourceParams.ts","../../../../projects/ngx-resource/core/src/lib/ResourceCommon/ResourceCRUDBase.ts","../../../../projects/ngx-resource/core/src/lib/ResourceCommon/ResourceCRUD.ts","../../../../projects/ngx-resource/core/src/lib/ResourceCommon/ResourceCRUDPromise.ts","../../../../projects/ngx-resource/core/src/lib/ResourceCommon/ResourceCRUDObservable.ts","../../../../projects/ngx-resource/core/src/public-api.ts","../../../../projects/ngx-resource/core/src/kkoehn-ngx-resource-core.ts"],"sourcesContent":["import { Observable, Subscription } from 'rxjs';\nimport { Provider } from '@angular/core';\n\nexport type TTypePromiseNull<T = {}> = T | Promise<T> | null;\n\nexport interface IResourceModuleConfig {\n handler?: Provider;\n}\n\nexport interface IResourceParamsBase {\n url?: string;\n pathPrefix?: string;\n path?: string;\n headers?: any;\n body?: any;\n params?: any;\n query?: any;\n}\n\nexport interface IResourceParams extends IResourceParamsBase {\n rootNode?: string;\n removeTrailingSlash?: boolean;\n addTimestamp?: boolean | string;\n withCredentials?: boolean;\n lean?: boolean;\n mutateBody?: boolean;\n returnAs?: ResourceActionReturnType;\n keepEmptyBody?: boolean;\n requestBodyType?: ResourceRequestBodyType;\n responseBodyType?: ResourceResponseBodyType;\n queryMappingMethod?: ResourceQueryMappingMethod;\n\n [prop: string]: any;\n}\n\nexport interface IResourceAction extends IResourceParams {\n method?: ResourceRequestMethod; // get default\n expectJsonArray?: boolean;\n resultFactory?: TResourceResultFactory;\n map?: TResourceResponseMap;\n filter?: TResourceResponseFilter;\n}\n\nexport type TResourceResponseMap = (item: any, options: IResourceActionInner) => any;\n\nexport type TResourceResponseFilter = (item: any, options: IResourceActionInner) => boolean;\n\nexport type TResourceResultFactory = (item: any, options: IResourceActionInner) => any;\n\nexport interface IResourceActionAttributes {\n body?: any;\n query?: any;\n params?: any;\n\n onSuccess?(data: any): any;\n\n onError?(data: any): any;\n}\n\nexport interface IResourceActionInner {\n actionAttributes?: IResourceActionAttributes;\n actionOptions?: IResourceAction;\n resolvedOptions?: IResourceParamsBase;\n\n queryMappingMethod?: ResourceQueryMappingMethod;\n\n usedInPath?: { [key: string]: boolean };\n mainObservable?: Observable<any>;\n subscription?: Subscription | null;\n promise?: Promise<any>;\n isModel?: boolean;\n\n requestOptions?: IResourceRequest;\n\n returnData?: any;\n}\n\nexport interface IResourceRequest {\n method?: ResourceRequestMethod;\n headers?: any;\n url?: string;\n withCredentials?: boolean;\n body?: any;\n query?: { [prop: string]: string };\n responseBodyType?: ResourceResponseBodyType;\n requestBodyType?: ResourceRequestBodyType;\n}\n\nexport interface IResourceHandlerResponse {\n promise?: Promise<IResourceResponse>;\n observable?: Observable<IResourceResponse>;\n\n abort?(): void;\n}\n\nexport interface IResourceResponse<B = any> {\n status: number;\n headers?: any;\n body?: B;\n}\n\nexport interface IResourceMethodStrictBase<IB, IQ, IP, O, R> {\n (body: IB,\n query: IQ,\n params: IP,\n onSuccess?: (data: O) => any,\n onError?: (err: IResourceResponse) => any): R;\n\n (body: IB,\n query: IQ,\n onSuccess?: (data: O) => any,\n onError?: (err: IResourceResponse) => any): R;\n\n (body: IB,\n onSuccess?: (data: O) => any,\n onError?: (err: IResourceResponse) => any): R;\n\n (onSuccess?: (data: O) => any,\n onError?: (err: IResourceResponse) => any): R;\n}\n\nexport interface IResourceMethodBase<IB, O, R>\n extends IResourceMethodStrictBase<IB, any, any, O, R> {\n}\n\n/**\n * @deprecated use IResourceMethodPromiseStrict instead\n */\nexport interface IResourceMethodStrict<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Promise<O>> {\n}\n\n/**\n * @deprecated use IResourceMethodPromise instead\n */\nexport interface IResourceMethod<IB, O>\n extends IResourceMethodBase<IB, O, Promise<O>> {\n}\n\nexport interface IResourceMethodPromiseStrict<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Promise<O>> {\n}\n\nexport interface IResourceMethodPromise<IB, O>\n extends IResourceMethodBase<IB, O, Promise<O>> {\n}\n\nexport interface IResourceMethodObservableStrict<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Observable<O>> {\n}\n\nexport interface IResourceMethodObservable<IB, O>\n extends IResourceMethodBase<IB, O, Observable<O>> {\n}\n\n\nexport interface IResourceMethodResultStrict<IB, IQ, IP, O extends {}>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, ResourceResult<O>> {\n}\n\nexport interface IResourceMethodResult<IB, O extends {}>\n extends IResourceMethodBase<IB, O, ResourceResult<O>> {\n}\n\n\n// As IResourceResponse\n\n/**\n * @deprecated use IResourceMethodPromiseStrictFull instead\n */\nexport interface IResourceMethodStrictFull<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Promise<IResourceResponse<O>>> {\n}\n\n/**\n * @deprecated use IResourceMethodPromiseFull instead\n */\nexport interface IResourceMethodFull<IB, O>\n extends IResourceMethodBase<IB, O, Promise<IResourceResponse<O>>> {\n}\n\nexport interface IResourceMethodPromiseStrictFull<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Promise<IResourceResponse<O>>> {\n}\n\nexport interface IResourceMethodPromiseFull<IB, O>\n extends IResourceMethodBase<IB, O, Promise<IResourceResponse<O>>> {\n}\n\nexport interface IResourceMethodObservableStrictFull<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, Observable<IResourceResponse<O>>> {\n}\n\nexport interface IResourceMethodObservableFull<IB, O>\n extends IResourceMethodBase<IB, O, Observable<IResourceResponse<O>>> {\n}\n\n\nexport interface IResourceMethodResultStrictFull<IB, IQ, IP, O>\n extends IResourceMethodStrictBase<IB, IQ, IP, O, ResourceResult<IResourceResponse<O>>> {\n}\n\nexport interface IResourceMethodResultFull<IB, O>\n extends IResourceMethodBase<IB, O, ResourceResult<IResourceResponse<O>>> {\n}\n\n\nexport type ResourceResult<R extends {}> = R & {\n $resolved?: boolean;\n $promise?: Promise<R>;\n $abort?(): void;\n};\n\n\nexport enum ResourceRequestBodyType {\n NONE = 0,\n JSON = 1,\n FORM = 2,\n FORM_DATA = 3,\n TEXT = 4,\n BLOB = 5,\n ARRAY_BUFFER = 6\n}\n\nexport enum ResourceResponseBodyType {\n Text = 1,\n Json = 2,\n ArrayBuffer = 3,\n Blob = 4\n}\n\nexport enum ResourceRequestMethod {\n Get = 1,\n Post = 2,\n Put = 3,\n Delete = 4,\n Options = 5,\n Head = 6,\n Patch = 7\n}\n\nexport enum ResourceQueryMappingMethod {\n Plain = 1,\n Bracket = 2,\n JQueryParamsBracket = 3,\n\n None = 99\n}\n\nexport enum ResourceActionReturnType {\n Promise = 'promise',\n Observable = 'observable',\n Resource = 'resource'\n}\n","import { ResourceActionReturnType, ResourceQueryMappingMethod, ResourceResponseBodyType, TTypePromiseNull } from './Declarations';\r\n\r\nexport class ResourceGlobalConfig {\r\n static url: TTypePromiseNull<string> = null;\r\n static pathPrefix: TTypePromiseNull<string> = null;\r\n static path: TTypePromiseNull<string> = null;\r\n static headers: TTypePromiseNull = null;\r\n static body: TTypePromiseNull = null;\r\n static params: TTypePromiseNull = null;\r\n static query: TTypePromiseNull = null;\r\n\r\n static removeTrailingSlash = true;\r\n static addTimestamp: boolean | string = false;\r\n static withCredentials = false;\r\n static lean: boolean | null = null;\r\n static returnAs: ResourceActionReturnType = ResourceActionReturnType.Observable;\r\n static responseBodyType: ResourceResponseBodyType = ResourceResponseBodyType.Json;\r\n\r\n\r\n static queryMappingMethod: ResourceQueryMappingMethod = ResourceQueryMappingMethod.Plain;\r\n\r\n}\r\n","import {\r\n IResourceAction,\r\n IResourceActionAttributes,\r\n IResourceActionInner,\r\n IResourceParamsBase,\r\n IResourceRequest,\r\n ResourceQueryMappingMethod,\r\n ResourceRequestBodyType\r\n} from './Declarations';\r\n\r\nexport class ResourceHelper {\r\n\r\n static cleanDataFields: string[] = [\r\n '$resolved',\r\n '$promise',\r\n '$abort',\r\n '$resource'\r\n ];\r\n\r\n\r\n private static isBrowser: boolean | null = null;\r\n\r\n static isRunningInBrowser(): boolean {\r\n\r\n if (this.isBrowser !== null) {\r\n return this.isBrowser;\r\n }\r\n\r\n try {\r\n this.isBrowser = !!window;\r\n } catch (e) {\r\n this.isBrowser = false;\r\n }\r\n\r\n return this.isBrowser;\r\n }\r\n\r\n static getRealTypeOf(data: any): ResourceRequestBodyType {\r\n if (!data) {\r\n return ResourceRequestBodyType.NONE;\r\n }\r\n\r\n if (this.isRunningInBrowser()) {\r\n if (FormData && data instanceof FormData) {\r\n return ResourceRequestBodyType.FORM_DATA;\r\n }\r\n\r\n if (Blob && data instanceof Blob) {\r\n return ResourceRequestBodyType.BLOB;\r\n }\r\n }\r\n\r\n if (data instanceof ArrayBuffer) {\r\n return ResourceRequestBodyType.ARRAY_BUFFER;\r\n }\r\n\r\n if (['string', 'number'].indexOf(typeof data) > -1) {\r\n return ResourceRequestBodyType.TEXT;\r\n }\r\n\r\n return ResourceRequestBodyType.JSON;\r\n }\r\n\r\n static defaults(dst: any, src: any): any {\r\n\r\n if (!dst) {\r\n dst = {};\r\n }\r\n\r\n Object.keys(src)\r\n .forEach((key: string) => {\r\n if (dst[key] === undefined) {\r\n dst[key] = src[key];\r\n }\r\n });\r\n\r\n return dst;\r\n\r\n }\r\n\r\n static isNullOrUndefined(value: any): boolean {\r\n return value === null || value === undefined;\r\n }\r\n\r\n static cleanData(obj: any): any {\r\n\r\n if (Array.isArray(obj)) {\r\n return this.cleanDataArray(obj);\r\n } else {\r\n return this.cleanDataObject(obj);\r\n }\r\n\r\n }\r\n\r\n static cleanDataArray(obj: any[]): any[] {\r\n\r\n obj = obj.filter(value => typeof value !== 'function');\r\n\r\n return obj;\r\n\r\n }\r\n\r\n static cleanDataObject(obj: any): any {\r\n const cleanedObj: any = {};\r\n\r\n for (const propName in obj) {\r\n\r\n if (typeof obj[propName] !== 'function' && this.cleanDataFields.indexOf(propName) === -1) {\r\n cleanedObj[propName] = obj[propName];\r\n }\r\n\r\n }\r\n\r\n return cleanedObj;\r\n }\r\n\r\n static defineReturnDataPropertiesResolvedAbort(returnData: any) {\r\n Object.defineProperty(returnData, '$resolved', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n\r\n Object.defineProperty(returnData, '$abort', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: () => {\r\n // does nothing for now\r\n }\r\n });\r\n }\r\n\r\n static defineReturnDataPropertiesPromise(returnData: any, value: any) {\r\n Object.defineProperty(returnData, '$promise', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value\r\n });\r\n }\r\n\r\n static getRequestOptionsOrThrow(options: IResourceActionInner): IResourceRequest {\r\n // tslint:disable-next-line: prefer-immediate-return\r\n const value = this.getResourceActionInnerOrThrow(options, 'requestOptions');\r\n\r\n return value;\r\n }\r\n\r\n // tslint:disable-next-line: no-identical-functions\r\n static getResolvedOptionsOrThrow(options: IResourceActionInner): IResourceParamsBase {\r\n // tslint:disable-next-line: prefer-immediate-return\r\n const value = this.getResourceActionInnerOrThrow(options, 'resolvedOptions');\r\n\r\n return value;\r\n }\r\n\r\n // tslint:disable-next-line: no-identical-functions\r\n static getActionAttributesOrThrow(options: IResourceActionInner): IResourceActionAttributes {\r\n // tslint:disable-next-line: prefer-immediate-return\r\n const value = this.getResourceActionInnerOrThrow(options, 'actionAttributes');\r\n\r\n return value;\r\n }\r\n\r\n // tslint:disable-next-line: no-identical-functions\r\n static getActionOptionsOrThrow(options: IResourceActionInner): IResourceAction {\r\n // tslint:disable-next-line: prefer-immediate-return\r\n const value = this.getResourceActionInnerOrThrow(options, 'actionOptions');\r\n\r\n return value;\r\n }\r\n\r\n static setRequestOptionsUrlParams(requestOptions: IResourceRequest,\r\n resolvedOptions: IResourceParamsBase,\r\n actionAttributes: IResourceActionAttributes,\r\n usedInPath: { [key: string]: boolean }) {\r\n\r\n if (!requestOptions.url) {\r\n throw new Error('setRequestOptionsUrlParams options.requestOptions.url missing');\r\n }\r\n\r\n const params = this.defaults(actionAttributes.params, resolvedOptions.params);\r\n const pathParams = requestOptions.url.match(/{([^}]*)}/g) || [];\r\n\r\n for (const pathParam of pathParams) {\r\n\r\n let pathKey = pathParam.substr(1, pathParam.length - 2);\r\n const isMandatory = pathKey[0] === '!';\r\n if (isMandatory) {\r\n pathKey = pathKey.substr(1);\r\n }\r\n\r\n const onlyPathParam = pathKey[0] === ':';\r\n if (onlyPathParam) {\r\n pathKey = pathKey.substr(1);\r\n }\r\n\r\n if (actionAttributes.query && actionAttributes.query === actionAttributes.params) {\r\n usedInPath[pathKey] = true;\r\n }\r\n\r\n const value = params[pathKey];\r\n\r\n if (onlyPathParam) {\r\n delete params[pathKey];\r\n }\r\n\r\n // Replacing in the url\r\n requestOptions.url = this.setRequestOptionsUrlParamsNewUrl(value, isMandatory, pathParam, requestOptions);\r\n\r\n }\r\n }\r\n\r\n static setRequestOptionsUrlParamsNewUrl(value: any,\r\n isMandatory: boolean,\r\n pathParam: string,\r\n requestOptions: IResourceRequest): string {\r\n\r\n if (!requestOptions.url) {\r\n throw new Error('setRequestOptionsUrlParamsNewUrl requestOptions.url missing');\r\n }\r\n\r\n if (this.isNullOrUndefined(value)) {\r\n if (isMandatory) {\r\n const consoleMsg = `Mandatory ${pathParam} path parameter is missing`;\r\n console.warn(consoleMsg);\r\n\r\n throw new Error(consoleMsg);\r\n }\r\n\r\n return requestOptions.url.substr(0, requestOptions.url.indexOf(pathParam));\r\n\r\n }\r\n\r\n return requestOptions.url.replace(pathParam, value);\r\n }\r\n\r\n static createRequestOptionsFormDataBody(body: any, actionOptions: IResourceAction): FormData {\r\n\r\n const newBody = new FormData();\r\n\r\n Object.keys(body).forEach((key: string) => {\r\n\r\n const value = body[key];\r\n\r\n if (body.hasOwnProperty(key) && typeof value !== 'function') {\r\n\r\n const isArrayOfFiles = value instanceof Array && value.reduce((acc, elem) => acc && elem instanceof File, true);\r\n\r\n if (isArrayOfFiles) {\r\n value.forEach((f: File, index: number) => {\r\n newBody.append(`${key}[${index}]`, f, f.name);\r\n });\r\n } else if (value instanceof File) {\r\n newBody.append(key, value, value.name);\r\n } else if (!actionOptions.rootNode) {\r\n newBody.append(key, value);\r\n }\r\n }\r\n\r\n });\r\n\r\n if (actionOptions.rootNode) {\r\n newBody.append(actionOptions.rootNode, JSON.stringify(body));\r\n }\r\n\r\n return newBody;\r\n\r\n }\r\n\r\n static appendQueryParams(query: { [prop: string]: string | any[] },\r\n key: string,\r\n value: any,\r\n queryMappingMethod?: ResourceQueryMappingMethod): void {\r\n\r\n if (value instanceof Date) {\r\n query[key] = value.toISOString();\r\n\r\n return;\r\n }\r\n\r\n if (typeof value === 'object') {\r\n\r\n switch (queryMappingMethod) {\r\n\r\n case ResourceQueryMappingMethod.Plain:\r\n this.appendQueryParamsMappingMethodPlain(query, key, value);\r\n\r\n return;\r\n\r\n case ResourceQueryMappingMethod.Bracket:\r\n /// Convert object and arrays to query params\r\n this.appendQueryParamsMappingMethodBracket(query, key, value, queryMappingMethod);\r\n\r\n return;\r\n\r\n case ResourceQueryMappingMethod.JQueryParamsBracket:\r\n /// Convert object and arrays to query params according to $.params\r\n this.appendQueryParamsMappingMethodJQueryParamsBracket(query, key, value, queryMappingMethod);\r\n\r\n return;\r\n\r\n }\r\n\r\n }\r\n\r\n query[key] = value;\r\n\r\n }\r\n\r\n static appendQueryParamsMappingMethodPlain(query: { [prop: string]: any }, key: string, value: any) {\r\n\r\n if (Array.isArray(value)) {\r\n query[key] = value.join(',');\r\n } else {\r\n\r\n if (value && typeof value === 'object') {\r\n /// Convert dates to ISO format string\r\n if (value instanceof Date) {\r\n value = value.toISOString();\r\n } else {\r\n value = JSON.stringify(value);\r\n }\r\n }\r\n\r\n query[key] = value;\r\n }\r\n }\r\n\r\n static appendQueryParamsMappingMethodBracket(query: { [prop: string]: any },\r\n key: string,\r\n value: any,\r\n queryMappingMethod: ResourceQueryMappingMethod) {\r\n\r\n for (const k in value) {\r\n if (value.hasOwnProperty(k)) {\r\n this.appendQueryParams(query, `${key}[${k}]`, value[k], queryMappingMethod);\r\n }\r\n }\r\n\r\n }\r\n\r\n static appendQueryParamsMappingMethodJQueryParamsBracket(query: { [prop: string]: any },\r\n key: string,\r\n value: any,\r\n queryMappingMethod: ResourceQueryMappingMethod) {\r\n\r\n for (const k in value) {\r\n if (value.hasOwnProperty(k)) {\r\n let path = `${key}[${k}]`;\r\n\r\n if (Array.isArray(value) && typeof value[k] !== 'object') {\r\n path = `${key}[]`;\r\n }\r\n this.appendQueryParams(query, path, value[k], queryMappingMethod);\r\n }\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Creates new abort method from subscription\r\n */\r\n static createNewAbortMethod(options: IResourceActionInner) {\r\n if (options.returnData && options.subscription) {\r\n\r\n const abort = options.returnData.abort;\r\n\r\n options.returnData.abort = () => {\r\n\r\n if (abort) {\r\n abort();\r\n }\r\n\r\n if (options.subscription) {\r\n options.subscription.unsubscribe();\r\n options.subscription = null;\r\n }\r\n\r\n };\r\n }\r\n }\r\n\r\n\r\n private static getResourceActionInnerOrThrow(options: IResourceActionInner, param: string): any {\r\n if (options[param]) {\r\n return options[param];\r\n }\r\n\r\n throw new Error('getResourceActionInnerOrThrow options.' + param + ' missing');\r\n }\r\n\r\n}\r\n","import { IResourceHandlerResponse, IResourceRequest } from './Declarations';\r\n\r\nexport abstract class ResourceHandler {\r\n abstract handle(req: IResourceRequest): IResourceHandlerResponse;\r\n}\r\n","import { IResourceHandlerResponse, IResourceRequest } from './Declarations';\r\nimport { ResourceHandler } from './ResourceHandler';\r\n\r\nexport class ResourceHandlerNoop extends ResourceHandler {\r\n handle(req: IResourceRequest): IResourceHandlerResponse {\r\n throw new Error('ResourceHandler is not provided');\r\n }\r\n}\r\n","import { Injector, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ResourceHandlerNoop } from './ResourceHandlerNoop';\r\nimport { ResourceHandler } from './ResourceHandler';\r\nimport { IResourceModuleConfig } from './Declarations';\r\n\r\n@NgModule()\r\nexport class ResourceModule {\r\n\r\n static injector: Injector | null = null;\r\n\r\n /**\r\n * For root\r\n */\r\n static forRoot(config: IResourceModuleConfig = {}): ModuleWithProviders<ResourceModule> {\r\n return {\r\n ngModule: ResourceModule,\r\n providers: [\r\n config.handler || {provide: ResourceHandler, useClass: ResourceHandlerNoop}\r\n ]\r\n };\r\n }\r\n\r\n /**\r\n * For child\r\n */\r\n // tslint:disable-next-line: no-identical-functions\r\n static forChild(config: IResourceModuleConfig = {}): ModuleWithProviders<ResourceModule> {\r\n return {\r\n ngModule: ResourceModule,\r\n providers: [\r\n config.handler || {provide: ResourceHandler, useClass: ResourceHandlerNoop}\r\n ]\r\n };\r\n }\r\n\r\n constructor(injector: Injector) {\r\n ResourceModule.injector = injector;\r\n }\r\n\r\n}\r\n","import { Observable, of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport {\r\n IResourceAction,\r\n IResourceActionInner,\r\n IResourceResponse,\r\n ResourceActionReturnType,\r\n ResourceQueryMappingMethod,\r\n ResourceRequestBodyType,\r\n ResourceRequestMethod\r\n} from './Declarations';\r\nimport { ResourceGlobalConfig } from './ResourceGlobalConfig';\r\nimport { ResourceHelper } from './ResourceHelper';\r\nimport { ResourceHandler } from './ResourceHandler';\r\nimport { ResourceModule } from './ResourceModule';\r\nimport { Optional, Type } from '@angular/core';\r\n\r\nexport class Resource {\r\n\r\n protected get requestHandler(): ResourceHandler {\r\n\r\n if (!this._requestHandler) {\r\n\r\n if (!ResourceModule.injector) {\r\n throw new Error('ResourceModule.injector is missing');\r\n }\r\n\r\n this._requestHandler = ResourceModule.injector.get(ResourceHandler as Type<ResourceHandler>);\r\n\r\n if (!this._requestHandler) {\r\n throw new Error('ResourceHandler provider is missing');\r\n }\r\n\r\n }\r\n\r\n return this._requestHandler;\r\n\r\n }\r\n\r\n private $url: string | null = null;\r\n private $pathPrefix: string | null = null;\r\n private $path: string | null = null;\r\n private $headers: {} | null = null;\r\n private $body: {} | null = null;\r\n private $params: {} | null = null;\r\n private $query: {} | null = null;\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _requestHandler: ResourceHandler | null = null;\r\n\r\n constructor(@Optional() requestHandler?: ResourceHandler) {\r\n\r\n if (requestHandler) {\r\n this._requestHandler = requestHandler;\r\n }\r\n\r\n (this.constructor as any).instance = this;\r\n\r\n }\r\n\r\n /**\r\n * Used to get url\r\n */\r\n $getUrl(actionOptions: IResourceAction = {}): string | Promise<string> {\r\n return this.$url || actionOptions.url || ResourceGlobalConfig.url || '';\r\n }\r\n\r\n $setUrl(url: string) {\r\n this.$url = url;\r\n }\r\n\r\n /**\r\n * Used to get path prefix\r\n */\r\n $getPathPrefix(actionOptions: IResourceAction = {}): string | Promise<string> {\r\n return this.$pathPrefix || actionOptions.pathPrefix || ResourceGlobalConfig.pathPrefix || '';\r\n }\r\n\r\n $setPathPrefix(path: string) {\r\n this.$pathPrefix = path;\r\n }\r\n\r\n /**\r\n * Used to get path\r\n */\r\n $getPath(actionOptions: IResourceAction = {}): string | Promise<string> {\r\n return this.$path || actionOptions.path || ResourceGlobalConfig.path || '';\r\n }\r\n\r\n $setPath(path: string) {\r\n this.$path = path;\r\n }\r\n\r\n /**\r\n * Get headers.\r\n */\r\n $getHeaders(actionOptions: IResourceAction = {}): any | Promise<any> {\r\n return this.$headers || actionOptions.headers || ResourceGlobalConfig.headers || {};\r\n }\r\n\r\n $setHeaders(headers: any) {\r\n this.$headers = headers;\r\n }\r\n\r\n /**\r\n * Get body\r\n */\r\n $getBody(actionOptions: IResourceAction = {}): any | Promise<any> {\r\n return this.$body || actionOptions.body || ResourceGlobalConfig.body || {};\r\n }\r\n\r\n $setBody(body: any) {\r\n this.$body = body;\r\n }\r\n\r\n /**\r\n * Get path params\r\n */\r\n $getParams(actionOptions: IResourceAction = {}): any | Promise<any> {\r\n return this.$params || actionOptions.params || ResourceGlobalConfig.params || {};\r\n }\r\n\r\n $setParams(params: any) {\r\n this.$params = params;\r\n }\r\n\r\n /**\r\n * Get query params\r\n */\r\n $getQuery(actionOptions: IResourceAction = {}): any | Promise<any> {\r\n return this.$query || actionOptions.query || ResourceGlobalConfig.query || {};\r\n }\r\n\r\n $setQuery(query: any) {\r\n this.$query = query;\r\n }\r\n\r\n /**\r\n * Used to filter received data.\r\n * Is applied on each element of array or object\r\n */\r\n $filter(data: any, options: IResourceActionInner = {}): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Used to map received data\r\n * Is applied on each element of array or object\r\n */\r\n $map(data: any, options: IResourceActionInner = {}): any {\r\n return data;\r\n }\r\n\r\n /**\r\n * Used to create result object\r\n * Is applied on each element of array or object\r\n */\r\n $resultFactory(data: any, options: IResourceActionInner = {}): any {\r\n return data == null ? {} : data;\r\n }\r\n\r\n $restAction(options: IResourceActionInner) {\r\n\r\n this.$_setResourceActionInnerDefaults(options);\r\n this.$_setResourceActionOptionDefaults(options);\r\n\r\n if (!options.actionOptions) {\r\n throw new Error('Action options are not set');\r\n }\r\n\r\n const actionOptions = options.actionOptions;\r\n\r\n if (!actionOptions.resultFactory) {\r\n throw new Error('Action options resultFactory is not set');\r\n }\r\n\r\n if (!options.actionAttributes) {\r\n throw new Error('Action attributes is not set');\r\n }\r\n\r\n\r\n if (actionOptions.mutateBody || options.isModel) {\r\n options.returnData = options.actionAttributes.body;\r\n }\r\n\r\n if (actionOptions.returnAs === ResourceActionReturnType.Resource) {\r\n options.returnData = actionOptions.expectJsonArray ? [] : actionOptions.resultFactory.call(this, null, options);\r\n }\r\n\r\n if (this.$_canSetInternalData(options)) {\r\n ResourceHelper.defineReturnDataPropertiesResolvedAbort(options.returnData);\r\n }\r\n\r\n options.mainObservable = this.$_createMainObservable(options);\r\n\r\n if (this.$_canSetInternalData(options)) {\r\n ResourceHelper.defineReturnDataPropertiesPromise(options.returnData, this.$_createPromise(options));\r\n }\r\n\r\n switch (actionOptions.returnAs) {\r\n case ResourceActionReturnType.Observable:\r\n return options.mainObservable;\r\n\r\n case ResourceActionReturnType.Promise:\r\n return this.$_createPromise(options);\r\n\r\n default:\r\n return options.returnData;\r\n\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Converts observable to promise and ads abort method\r\n */\r\n protected $_createPromise(options: IResourceActionInner): Promise<any> {\r\n\r\n if (!options.promise) {\r\n options.promise = new Promise<any>((resolve, reject) => {\r\n\r\n if (!options.mainObservable) {\r\n reject(new Error('$_createPromise options.mainObservable missing'));\r\n\r\n return;\r\n }\r\n\r\n options.subscription = options.mainObservable.subscribe(\r\n resolve,\r\n error => {\r\n reject(error);\r\n options.subscription = null;\r\n },\r\n () => {\r\n options.subscription = null;\r\n }\r\n );\r\n\r\n ResourceHelper.createNewAbortMethod(options);\r\n\r\n });\r\n }\r\n\r\n return options.promise;\r\n\r\n }\r\n\r\n\r\n /**\r\n * Creates main request observable\r\n */\r\n protected $_createMainObservable(options: IResourceActionInner): Observable<any> {\r\n\r\n const requestPreparationPromise = this.$_setResolvedOptions(options)\r\n .then((o: IResourceActionInner) => this.$_createRequestOptions(o));\r\n\r\n return of(requestPreparationPromise)\r\n .pipe(\r\n switchMap((oPromise: Promise<IResourceActionInner>) => {\r\n return oPromise\r\n .then((o: IResourceActionInner) => {\r\n\r\n if (!o.requestOptions) {\r\n throw new Error('IResourceActionInner miss request options');\r\n }\r\n\r\n const handlerResp = this.requestHandler.handle(o.requestOptions);\r\n\r\n if (o.returnData && this.$_canSetInternalData(options)) {\r\n o.returnData.$abort = handlerResp.abort;\r\n }\r\n\r\n if (handlerResp.observable) {\r\n return handlerResp.observable as any;\r\n }\r\n\r\n return handlerResp.promise;\r\n\r\n });\r\n }),\r\n switchMap(s => s instanceof Observable ? s : of(s)),\r\n map((resp: IResourceResponse) => this.$handleSuccessResponse(options, resp)),\r\n catchError((resp: IResourceResponse) => {\r\n throw this.$handleErrorResponse(options, resp);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Success response handler\r\n */\r\n protected $handleSuccessResponse(options: IResourceActionInner, resp: IResourceResponse): any {\r\n\r\n let body = resp.body;\r\n\r\n if (Array.isArray(body)) {\r\n body = this.$prepareSuccessResponseBodyArray(body, options);\r\n } else {\r\n body = this.$prepareSuccessResponseBodyObject(body, options);\r\n }\r\n\r\n if (this.$_canSetInternalData(options)) {\r\n options.returnData.$resolved = true;\r\n }\r\n\r\n if (options.actionOptions && options.actionOptions.asResourceResponse) {\r\n resp.body = body;\r\n body = resp;\r\n }\r\n\r\n if (options.actionAttributes && options.actionAttributes.onSuccess) {\r\n options.actionAttributes.onSuccess(body);\r\n }\r\n\r\n return body;\r\n }\r\n\r\n /**\r\n * Prepare success response body as array\r\n */\r\n protected $prepareSuccessResponseBodyArray(body: any[], options: IResourceActionInner): any[] {\r\n\r\n if (!options.actionOptions) {\r\n throw new Error('$prepareSuccessResponseBodyArray options.actionOptions missing');\r\n }\r\n\r\n const actionOptions = options.actionOptions;\r\n\r\n body = body\r\n .filter((item: any) => {\r\n return actionOptions.filter ? actionOptions.filter.call(this, item, options) : true;\r\n })\r\n .map((item: any) => {\r\n\r\n if (actionOptions.map) {\r\n item = actionOptions.map.call(this, item, options);\r\n }\r\n\r\n return actionOptions.resultFactory ? actionOptions.resultFactory.call(this, item, options) : item;\r\n });\r\n\r\n if (options.returnData) {\r\n Array.prototype.push.apply(options.returnData, body);\r\n body = options.returnData;\r\n }\r\n\r\n return body;\r\n\r\n }\r\n\r\n /**\r\n * Prepare success response body as object\r\n */\r\n protected $prepareSuccessResponseBodyObject(body: any, options: IResourceActionInner): any {\r\n\r\n if (!options.actionOptions) {\r\n throw new Error('$prepareSuccessResponseBodyObject options.actionOptions missing');\r\n }\r\n\r\n const actionOptions = options.actionOptions;\r\n\r\n if (actionOptions.filter && !actionOptions.filter.call(this, body, options)) {\r\n return null;\r\n }\r\n\r\n if (actionOptions.map) {\r\n body = actionOptions.map.call(this, body, options);\r\n }\r\n\r\n let newBody = options.returnData;\r\n\r\n if (newBody) {\r\n if (typeof newBody.$setData === 'function') {\r\n newBody.$setData(body);\r\n } else {\r\n Object.assign(newBody, body);\r\n }\r\n } else {\r\n newBody = actionOptions.resultFactory ? actionOptions.resultFactory.call(this, body, options) : body;\r\n }\r\n\r\n body = newBody;\r\n\r\n // If it's model\r\n if (body.$resource) {\r\n body.$resolved = true;\r\n body.$promise = options.mainObservable;\r\n body.$abort = () => true;\r\n }\r\n\r\n return body;\r\n\r\n }\r\n\r\n /**\r\n * Handle error\r\n */\r\n protected $handleErrorResponse(options: IResourceActionInner, resp: IResourceResponse): any {\r\n\r\n if (options.returnData && this.$_canSetInternalData(options)) {\r\n options.returnData.$resolved = true;\r\n }\r\n\r\n if (options.actionAttributes && options.actionAttributes.onError) {\r\n options.actionAttributes.onError(resp);\r\n }\r\n\r\n throw resp;\r\n }\r\n\r\n /**\r\n * Sets request options url\r\n */\r\n protected $setRequestOptionsUrl(options: IResourceActionInner): void {\r\n\r\n const requestOptions = ResourceHelper.getRequestOptionsOrThrow(options);\r\n const resolvedOptions = ResourceHelper.getResolvedOptionsOrThrow(options);\r\n const actionAttributes = ResourceHelper.getActionAttributesOrThrow(options);\r\n\r\n if (!requestOptions.url) {\r\n requestOptions.url =\r\n (resolvedOptions.url || '') +\r\n (resolvedOptions.pathPrefix || '') +\r\n (resolvedOptions.path || '');\r\n }\r\n\r\n\r\n options.usedInPath = {};\r\n\r\n ResourceHelper.setRequestOptionsUrlParams(\r\n requestOptions,\r\n resolvedOptions,\r\n actionAttributes,\r\n options.usedInPath\r\n );\r\n\r\n // Removing double slashed from final url\r\n requestOptions.url = requestOptions.url.replace(/\\/\\/+/g, '/');\r\n if (requestOptions.url.startsWith('http')) {\r\n requestOptions.url = requestOptions.url.replace(':/', '://');\r\n }\r\n\r\n // Remove trailing slash\r\n if (options.actionOptions && options.actionOptions.removeTrailingSlash) {\r\n while (requestOptions.url[requestOptions.url.length - 1] === '/') {\r\n requestOptions.url = requestOptions.url.substr(0, requestOptions.url.length - 1);\r\n }\r\n }\r\n\r\n }\r\n\r\n protected $setRequestOptionsBody(options: IResourceActionInner): void {\r\n\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n const actionAttributes = ResourceHelper.getActionAttributesOrThrow(options);\r\n const requestOptions = ResourceHelper.getRequestOptionsOrThrow(options);\r\n\r\n let body = actionAttributes.body;\r\n\r\n if (!body) {\r\n return;\r\n }\r\n\r\n const realBodyType = ResourceHelper.getRealTypeOf(body);\r\n\r\n let bodyOk: boolean = realBodyType === actionOptions.requestBodyType;\r\n\r\n if (\r\n !bodyOk &&\r\n realBodyType === ResourceRequestBodyType.JSON &&\r\n actionOptions.requestBodyType === ResourceRequestBodyType.FORM_DATA) {\r\n\r\n body = ResourceHelper.createRequestOptionsFormDataBody(body, actionOptions);\r\n bodyOk = true;\r\n\r\n }\r\n\r\n if (!bodyOk) {\r\n throw new Error('Can not convert body');\r\n }\r\n\r\n if (!(body instanceof FormData)) {\r\n // Add root node if needed\r\n if (actionOptions.rootNode) {\r\n const newBody: any = {};\r\n newBody[actionOptions.rootNode] = body;\r\n body = newBody;\r\n }\r\n\r\n\r\n if ((actionOptions.requestBodyType === ResourceRequestBodyType.NONE ||\r\n (actionOptions.requestBodyType === ResourceRequestBodyType.JSON &&\r\n typeof body === 'object' && Object.keys(body).length === 0)\r\n ) && !actionOptions.keepEmptyBody) {\r\n return;\r\n }\r\n\r\n }\r\n\r\n requestOptions.body = body;\r\n\r\n }\r\n\r\n protected $setRequestOptionsQuery(options: IResourceActionInner): void {\r\n\r\n const actionAttributes = ResourceHelper.getActionAttributesOrThrow(options);\r\n const resolvedOptions = ResourceHelper.getResolvedOptionsOrThrow(options);\r\n const requestOptions = ResourceHelper.getRequestOptionsOrThrow(options);\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n\r\n options.usedInPath = options.usedInPath || {};\r\n\r\n let oq = actionAttributes.query || {};\r\n if (resolvedOptions.query) {\r\n oq = {...resolvedOptions.query, ...oq};\r\n }\r\n\r\n if (oq) {\r\n requestOptions.query = {};\r\n Object.keys(oq).forEach((key: string) => {\r\n // tslint:disable-next-line: no-non-null-assertion\r\n if (oq.hasOwnProperty(key) && !options.usedInPath![key]) {\r\n this.$appendQueryParams(requestOptions.query as any, key, oq[key], options.queryMappingMethod);\r\n }\r\n });\r\n }\r\n\r\n if (actionOptions.addTimestamp) {\r\n\r\n requestOptions.query = requestOptions.query || {};\r\n\r\n this.$appendQueryParams(\r\n requestOptions.query,\r\n actionOptions.addTimestamp as string,\r\n Date.now().toString(10),\r\n options.queryMappingMethod);\r\n }\r\n\r\n }\r\n\r\n protected $appendQueryParams(query: { [prop: string]: string | any[] },\r\n key: string,\r\n value: any,\r\n queryMappingMethod?: ResourceQueryMappingMethod): void {\r\n\r\n ResourceHelper.appendQueryParams(query, key, value, queryMappingMethod);\r\n\r\n }\r\n\r\n protected $_setResourceActionInnerDefaults(options: IResourceActionInner) {\r\n\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n const actionAttributes = ResourceHelper.getActionAttributesOrThrow(options);\r\n\r\n // Setting default request method\r\n if (!actionOptions.method) {\r\n actionOptions.method = ResourceRequestMethod.Get;\r\n }\r\n\r\n\r\n if (actionAttributes.body) {\r\n\r\n // Setting default request content type\r\n if (!actionOptions.requestBodyType) {\r\n actionOptions.requestBodyType = ResourceHelper.getRealTypeOf(actionAttributes.body);\r\n }\r\n\r\n\r\n // Setting params and query if needed\r\n if (actionOptions.requestBodyType === ResourceRequestBodyType.JSON &&\r\n typeof actionAttributes.body === 'object' && !Array.isArray(actionAttributes.body)) {\r\n\r\n if (!actionAttributes.params) {\r\n actionAttributes.params = actionAttributes.body;\r\n }\r\n\r\n options.isModel = !!actionAttributes.body.$resource;\r\n\r\n }\r\n\r\n }\r\n\r\n actionAttributes.params = actionAttributes.params || {};\r\n\r\n if (!actionAttributes.query && actionOptions.method === ResourceRequestMethod.Get) {\r\n actionAttributes.query = actionAttributes.params;\r\n }\r\n\r\n options.queryMappingMethod = actionOptions.queryMappingMethod || ResourceGlobalConfig.queryMappingMethod;\r\n\r\n }\r\n\r\n // tslint:disable-next-line: cognitive-complexity\r\n protected $_setResourceActionOptionDefaults(options: IResourceActionInner) {\r\n\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.filter)) {\r\n actionOptions.filter = this.$filter;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.map)) {\r\n actionOptions.map = this.$map;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.resultFactory)) {\r\n actionOptions.resultFactory = this.$resultFactory;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.removeTrailingSlash)) {\r\n actionOptions.removeTrailingSlash = ResourceGlobalConfig.removeTrailingSlash;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.withCredentials)) {\r\n actionOptions.withCredentials = ResourceGlobalConfig.withCredentials;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.returnAs)) {\r\n actionOptions.returnAs = ResourceGlobalConfig.returnAs;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.responseBodyType)) {\r\n actionOptions.responseBodyType = ResourceGlobalConfig.responseBodyType;\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.lean)) {\r\n actionOptions.lean = !!ResourceGlobalConfig.lean;\r\n\r\n if (actionOptions.mutateBody\r\n && actionOptions.returnAs === ResourceActionReturnType.Resource\r\n && ResourceHelper.isNullOrUndefined(actionOptions.lean)) {\r\n\r\n actionOptions.lean = true;\r\n\r\n }\r\n }\r\n\r\n if (ResourceHelper.isNullOrUndefined(actionOptions.addTimestamp)) {\r\n actionOptions.addTimestamp = ResourceGlobalConfig.addTimestamp;\r\n\r\n if (actionOptions.addTimestamp && typeof actionOptions.addTimestamp !== 'string') {\r\n actionOptions.addTimestamp = 'ts';\r\n }\r\n }\r\n }\r\n\r\n protected $_setResolvedOptions(options: IResourceActionInner): Promise<IResourceActionInner> {\r\n return Promise.all([\r\n this.$getUrl(options.actionOptions),\r\n this.$getPathPrefix(options.actionOptions),\r\n this.$getPath(options.actionOptions),\r\n this.$getHeaders(options.actionOptions),\r\n this.$getBody(options.actionOptions),\r\n this.$getParams(options.actionOptions),\r\n this.$getQuery(options.actionOptions)\r\n ])\r\n .then(([url, pathPrefix, path, headers, body, params, query]: any[]) => {\r\n\r\n options.resolvedOptions = {\r\n url,\r\n pathPrefix,\r\n path,\r\n headers,\r\n body,\r\n params,\r\n query\r\n };\r\n\r\n return options;\r\n });\r\n }\r\n\r\n protected $_createRequestOptions(options: IResourceActionInner): IResourceActionInner | Promise<IResourceActionInner> {\r\n\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n const resolvedOptions = ResourceHelper.getResolvedOptionsOrThrow(options);\r\n\r\n options.requestOptions = {};\r\n\r\n // Step 1 set main\r\n options.requestOptions.method = actionOptions.method;\r\n options.requestOptions.headers = resolvedOptions.headers;\r\n options.requestOptions.withCredentials = actionOptions.withCredentials;\r\n options.requestOptions.responseBodyType = actionOptions.responseBodyType;\r\n options.requestOptions.requestBodyType = actionOptions.requestBodyType;\r\n\r\n // Step 2 create url\r\n this.$setRequestOptionsUrl(options);\r\n\r\n // Step 3 create body\r\n this.$setRequestOptionsBody(options);\r\n\r\n // Step 4 set query params\r\n this.$setRequestOptionsQuery(options);\r\n\r\n return options;\r\n }\r\n\r\n protected $_canSetInternalData(options: IResourceActionInner): boolean {\r\n const actionOptions = ResourceHelper.getActionOptionsOrThrow(options);\r\n\r\n return !!(options.returnData && (!actionOptions.lean || options.isModel));\r\n }\r\n\r\n}\r\n","import { Resource } from './Resource';\r\nimport { IResourceAction, ResourceRequestMethod } from './Declarations';\r\n\r\n\r\nexport function ResourceAction(methodOptions?: IResourceAction) {\r\n\r\n methodOptions = methodOptions || {};\r\n\r\n if (methodOptions.method === undefined) {\r\n methodOptions.method = ResourceRequestMethod.Get;\r\n }\r\n\r\n // tslint:disable-next-line: only-arrow-functions\r\n return function(target: Resource, propertyKey: string) {\r\n\r\n (target as any)[propertyKey] = function(...args: any[]): any {\r\n\r\n const callbacks: any = args.filter((arg: any) => typeof arg === 'function');\r\n const data: any = args.filter((arg: any) => typeof arg !== 'function');\r\n\r\n const [body, query, params] = data;\r\n const [onSuccess, onError] = callbacks;\r\n\r\n const actionOptions: IResourceAction = {...this.getResourceOptions(), ...methodOptions};\r\n\r\n return this.$restAction({actionAttributes: {body, query, params, onSuccess, onError}, actionOptions});\r\n\r\n };\r\n\r\n };\r\n\r\n}\r\n","import { ResourceHelper } from './ResourceHelper';\nimport { ResourceCRUDPromise } from './ResourceCommon/ResourceCRUDPromise';\n\nexport abstract class ResourceModel {\n\n static resourceInstance: ResourceCRUDPromise<any, any, any> | null = null;\n\n protected static methodQuery = 'query';\n protected static methodGet = 'get';\n protected static methodCreate = 'create';\n protected static methodUpdate = 'update';\n protected static methodRemove = 'remove';\n\n\n readonly $resource: any = null;\n\n $resolved = true;\n $promise: Promise<any> | null = null;\n $abort: () => void;\n\n $idField = 'id';\n\n static get(id: string | number): Promise<any> {\n // tslint:disable-next-line: prefer-immediate-return\n const p = this.getInstance()[this.methodGet]({id});\n\n return p;\n }\n\n static query(query?: any): Promise<any> {\n // tslint:disable-next-line: prefer-immediate-return\n const p = this.getInstance()[this.methodQuery](query);\n\n return p;\n }\n\n static remove(id: string | number): Promise<void> {\n // tslint:disable-next-line: prefer-immediate-return\n const p = this.getInstance()[this.methodRemove]({id});\n\n return p;\n }\n\n private static getInstance(): any {\n if (!this.resourceInstance) {\n\n const model: ResourceModel = (new (this as any)());\n\n if (!model.$resource) {\n throw new Error('Your resource is not defined');\n }\n\n if (!model.$resource.instance) {\n throw new Error('Your resource is not created (inject it somewhere)');\n }\n\n this.resourceInstance = (new (this as any)()).$resource.instance;\n }\n\n return this.resourceInstance;\n }\n\n\n public $setData(data: any) {\n Object.assign(this, data);\n\n return this;\n }\n\n public $save(query?: any, params?: any) {\n\n if (this.isNew()) {\n return this.$create(query, params);\n } else {\n return this.$update(query, params);\n }\n\n }\n\n public $create(query?: any, params?: any) {\n return this.$executeResourceMethod((this.constructor as any).methodCreate, query, params);\n }\n\n public $update(query?: any, params?: any) {\n return this.$executeResourceMethod((this.constructor as any).methodUpdate, query, params);\n }\n\n public $remove(query?: any, params?: any) {\n return this.$executeResourceMethod((this.constructor as any).methodRemove, query, params);\n }\n\n public toJSON(): any {\n return ResourceHelper.cleanData(this);\n }\n\n protected isNew(): boolean {\n return !(this as any)[this.$idField];\n }\n\n protected $getResourceWithMethodCheck(methodName: string): any {\n\n if (!this.$resource) {\n console.error(`Your Resource is not defined`);\n\n return null;\n }\n\n const restInstance = this.$resource.instance;\n\n if (!restInstance) {\n console.error(`Your Resource is not defined or not created`);\n\n return null;\n }\n\n if (!restInstance[methodName]) {\n console.error(`Your Resource has no implemented ${methodName} method.`);\n\n return null;\n }\n\n return restInstance;\n\n }\n\n protected $executeResourceMethod(methodName: string, query?: any, params?: any) {\n\n const resource = this.$getResourceWithMethodCheck(methodName);\n\n if (resource) {\n resource[methodName](this, query, params);\n }\n\n return this;\n }\n\n\n}\n","import { IResourceParams } from './Declarations';\r\n\r\nexport function ResourceParams(params: IResourceParams = {}) {\r\n\r\n // tslint:disable-next-line: only-arrow-functions\r\n return function(target: any) {\r\n\r\n target.prototype.getResourceOptions = () => params;\r\n\r\n };\r\n}\r\n","import { Resource } from '../Resource';\r\nimport { IResourceAction, IResourceResponse, ResourceActionReturnType, ResourceRequestMethod } from '../Declarations';\r\n\r\n\r\nexport abstract class ResourceCRUDBase<TQuery, TShort, TFull, TQueryResult, TRetQuery, TRetFull, TRetAny> extends Resource {\r\n\r\n protected readonly abstract $crudReturnAs: ResourceActionReturnType;\r\n\r\n query(query?: TQuery,\r\n onSuccess?: (data: TQueryResult) => any,\r\n onError?: (err: IResourceResponse) => any): TRetQuery {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: query,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions()\r\n });\r\n\r\n }\r\n\r\n get(data: { id: any },\r\n onSuccess?: (data: TFull) => any,\r\n onError?: (err: IResourceResponse) => any): TRetFull {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: data,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions({\r\n path: '/{!id}'\r\n })\r\n });\r\n\r\n }\r\n\r\n save(data: TFull,\r\n onSuccess?: (data: TFull) => any,\r\n onError?: (err: IResourceResponse) => any): TRetFull {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: data,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions({\r\n method: ResourceRequestMethod.Post,\r\n })\r\n });\r\n\r\n }\r\n\r\n update(data: TFull,\r\n onSuccess?: (data: TFull) => any,\r\n onError?: (err: IResourceResponse) => any): TRetFull {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: data,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions({\r\n method: ResourceRequestMethod.Put,\r\n path: '/{!id}'\r\n })\r\n });\r\n\r\n }\r\n\r\n remove(data: { id: any },\r\n onSuccess?: (data: any) => any,\r\n onError?: (err: IResourceResponse) => any): TRetAny {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: data,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions({\r\n method: ResourceRequestMethod.Delete,\r\n path: '/{!id}'\r\n })\r\n });\r\n\r\n }\r\n\r\n patch(data: { id: any } & Partial<TFull>,\r\n onSuccess?: (data: TFull) => any,\r\n onError?: (err: IResourceResponse) => any): TRetFull {\r\n\r\n return this.$restAction({\r\n actionAttributes: {\r\n body: data,\r\n onSuccess,\r\n onError\r\n },\r\n actionOptions: this.$_crudBaseGetActionOptions({\r\n method: ResourceRequestMethod.Patch,\r\n path: '/{!id}'\r\n })\r\n });\r\n\r\n }\r\n\r\n // Alias to save\r\n create(data: TFull, callback?: (res: TFull) => any): TRetFull {\r\n return this.save(data, callback);\r\n }\r\n\r\n\r\n private $_crudBaseGetActionOptions(actionOptions: IResourceAction = {}): IResourceAction {\r\n return {\r\n ...(this as any).getResourceOptions(),\r\n method: ResourceRequestMethod.Get,\r\n returnAs: this.$crudReturnAs,\r\n ...actionOptions\r\n };\r\n }\r\n\r\n}\r\n","import { ResourceActionReturnType } from '../Declarations';\r\nimport { ResourceCRUDBase } from './ResourceCRUDBase';\r\n\r\n\r\n/**\r\n * @deprecated use ResourceCRUDPromise or ResourceCRUDObservable instead\r\n */\r\nexport abstract class ResourceCRUD<TQuery, TShort, TFull, TQueryResult = TShort[]>\r\n extends ResourceCRUDBase<TQuery, TShort, TFull, TQueryResult,\r\n Promise<TQueryResult>, Promise<TFull>, Promise<any>> {\r\n\r\n protected readonly $crudReturnAs = ResourceActionReturnType.Promise;\r\n\r\n}\r\n","import { ResourceActionReturnType } from '../Declarations';\r\nimport { ResourceCRUDBase } from './ResourceCRUDBase';\r\n\r\n\r\nexport abstract class ResourceCRUDPromise<TQuery, TShort, TFull, TQueryResult = TShort[]>\r\n extends ResourceCRUDBase<TQuery, TShort, TFull, TQueryResult,\r\n Promise<TQueryResult>, Promise<TFull>, Promise<any>> {\r\n\r\n protected readonly $crudReturnAs = ResourceActionReturnType.Promise;\r\n\r\n}\r\n","import { ResourceActionReturnType } from '../Declarations';\r\nimport { ResourceCRUDBase } from './ResourceCRUDBase';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\nexport abstract class ResourceCRUDObservable<TQuery, TShort, TFull, TQueryResult = TShort[]>\r\n extends ResourceCRUDBase<TQuery, TShort, TFull, TQueryResult,\r\n Observable<TQueryResult>, Observable<TFull>, Observable<any>> {\r\n\r\n protected readonly $crudReturnAs = ResourceActionReturnType.Observable;\r\n\r\n}\r\n","/*\r\n * Public API Surface of core\r\n */\r\n\r\nexport * from './lib/Declarations';\r\nexport * from './lib/Resource';\r\nexport * from './lib/ResourceAction';\r\nexport * from './lib/ResourceGlobalConfig';\r\nexport * from './lib/ResourceHandler';\r\nexport * from './lib/ResourceHandlerNoop';\r\nexport * from './lib/ResourceHelper';\r\nexport * from './lib/ResourceModel';\r\nexport * from './lib/ResourceParams';\r\nexport * from './lib/ResourceCommon/ResourceCRUDBase';\r\nexport * from './lib/ResourceCommon/ResourceCRUD';\r\nexport * from './lib/ResourceCommon/ResourceCRUDPromise';\r\nexport * from './lib/ResourceCommon/ResourceCRUDObservable';\r\nexport * from './lib/ResourceModule';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}