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