{"version":3,"file":"breeze-client-adapter-ajax-httpclient.mjs","sources":["../../src/adapter-core.ts","../../src/adapter-ajax-httpclient.ts","../../src/breeze-client-adapter-ajax-httpclient.ts"],"sourcesContent":["/** Appends parameter to url, with appropriate delimiter */\r\nexport function appendQueryStringParameter(url: string, parameter: string) {\r\n  if (!parameter) return url;\r\n\r\n  let separator = url.endsWith(\"?\") ? \"\" : url.includes(\"?\") ? \"&\" : \"?\";\r\n\r\n  return url + separator + parameter;\r\n}\r\n\r\n/** Encodes the object into query string parameters */\r\nexport function encodeParams(obj: {}) {\r\n  let query = '';\r\n  let subValue: any, innerObj: any, fullSubName: any;\r\n\r\n  for (let name in obj) {\r\n    if (!obj.hasOwnProperty(name)) { continue; }\r\n\r\n    let value = obj[name];\r\n\r\n    if (value instanceof Array) {\r\n      for (let i = 0; i < value.length; ++i) {\r\n        subValue = value[i];\r\n        fullSubName = name + '[' + i + ']';\r\n        innerObj = {};\r\n        innerObj[fullSubName] = subValue;\r\n        query += encodeParams(innerObj) + '&';\r\n      }\r\n    } else if (value && value.toISOString) { // a feature of Date-like things\r\n      query += encodeURIComponent(name) + '=' + encodeURIComponent(value.toISOString()) + '&';\r\n    } else if (value instanceof Object) {\r\n      for (let subName in value) {\r\n        if (obj.hasOwnProperty(name)) {\r\n          subValue = value[subName];\r\n          fullSubName = name + '[' + subName + ']';\r\n          innerObj = {};\r\n          innerObj[fullSubName] = subValue;\r\n          query += encodeParams(innerObj) + '&';\r\n        }\r\n      }\r\n    } else if (value === null) {\r\n      query += encodeURIComponent(name) + '=&';\r\n    } else if (value !== undefined) {\r\n      query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';\r\n    }\r\n  }\r\n\r\n  return query.length ? query.substr(0, query.length - 1) : query;\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpHeaders, HttpRequest, HttpResponse } from \"@angular/common/http\";\r\nimport { AjaxConfig, config, core, HttpResponse as BreezeHttpResponse, BreezeConfig, AjaxRequestInterceptor, AjaxAdapter } from \"breeze-client\";\r\nimport { filter, map } from \"rxjs/operators\";\r\nimport { appendQueryStringParameter, encodeParams } from \"./adapter-core\";\r\n\r\nexport class AjaxHttpClientAdapter implements AjaxAdapter {\r\n  static adapterName = 'httpclient';\r\n  name = AjaxHttpClientAdapter.adapterName;\r\n  defaultSettings = {};\r\n  requestInterceptor: AjaxRequestInterceptor;\r\n\r\n  constructor(public http: HttpClient) { }\r\n\r\n  static register(http: HttpClient, breezeConfig?: BreezeConfig) {\r\n    breezeConfig = breezeConfig || config;\r\n    breezeConfig.registerAdapter(\"ajax\", <any>function () { return new AjaxHttpClientAdapter(http); });\r\n    return breezeConfig.initializeAdapterInstance(\"ajax\", AjaxHttpClientAdapter.adapterName, true) as AjaxHttpClientAdapter;\r\n  }\r\n\r\n  initialize() { }\r\n\r\n  ajax(config: AjaxConfig) {\r\n    if (!this.http) {\r\n      throw new Error('Unable to locate angular http module for ajax adapter');\r\n    }\r\n\r\n    // merge default DataSetAdapter Settings with config arg\r\n    if (!core.isEmpty(this.defaultSettings)) {\r\n      let compositeConfig = core.extend({}, this.defaultSettings);\r\n      config = <AjaxConfig>core.extend(compositeConfig, config);\r\n      // extend is shallow; extend headers separately\r\n      let headers = core.extend({}, this.defaultSettings['headers']); // copy default headers 1st\r\n      config['headers'] = core.extend(headers, config.headers);\r\n    }\r\n\r\n    if (config.crossDomain) {\r\n      throw new Error(this.name + ' does not support JSONP (crossDomain) requests');\r\n    }\r\n\r\n    // Hack: Not sure how Angular handles writing 'search' parameters to the url.\r\n    // so this approach takes over the url param writing completely.\r\n    const parameters = core.isEmpty(config.params) ? null : encodeParams(config.params);\r\n    const url = appendQueryStringParameter(config.url, parameters);\r\n\r\n    let headers = new HttpHeaders(config.headers || {});\r\n    if (!headers.has('Content-Type')) {\r\n      if (config.type !== 'GET' && config.type !== 'DELETE' && !!config.contentType) {\r\n        headers = headers.set('Content-Type',\r\n          <string>config.contentType || 'application/json; charset=utf-8');\r\n      }\r\n    }\r\n\r\n    let body: any = config.data;\r\n    let request = new HttpRequest((config.type || 'GET').toUpperCase(), url, body, { headers: headers, responseType: \"text\" });\r\n\r\n    let requestInfo = {\r\n      adapter: this,      // this adapter\r\n      request: request,   // the http request from the requestOptions\r\n      dsaConfig: config,  // the config arg from the calling Breeze DataServiceAdapter\r\n      success: successFn, // adapter's success callback\r\n      error: errorFn      // adapter's error callback\r\n    };\r\n\r\n    if (core.isFunction(this.requestInterceptor)) {\r\n      this.requestInterceptor(requestInfo as any);\r\n      if (this.requestInterceptor['oneTime']) {\r\n        this.requestInterceptor = null;\r\n      }\r\n    }\r\n\r\n    if (requestInfo.request) { // exists unless requestInterceptor killed it.\r\n      const ffilter = filter((response: HttpEvent<any>) => response instanceof HttpResponse);\r\n      const fmap = map(extractData);\r\n\r\n      fmap(ffilter(this.http.request(requestInfo.request)))\r\n        .forEach(requestInfo.success)\r\n        .catch(requestInfo.error);\r\n    }\r\n\r\n    function extractData(event: HttpEvent<any>) {\r\n      let response = event as HttpResponse<any>;\r\n      let data: any;\r\n      let dt = requestInfo.dsaConfig.dataType;\r\n      // beware:`res.json` and `res.text` will be async some day\r\n      if (dt && dt !== 'json') {\r\n        data = response.body;\r\n      } else {\r\n        data = JSON.parse(response.body);\r\n      }\r\n      return { data, response };\r\n    }\r\n\r\n    function successFn(arg: { data: any, response: HttpResponse<any> }) {\r\n      if (arg.response.status < 200 || arg.response.status >= 300) {\r\n        throw { data: arg.data, response: arg.response };\r\n      }\r\n\r\n      let httpResponse: BreezeHttpResponse = {\r\n        config: requestInfo.request,\r\n        data: arg.data,\r\n        getHeaders: makeGetHeaders(arg.response.headers),\r\n        status: arg.response.status\r\n      };\r\n      httpResponse['ngConfig'] = requestInfo.request;\r\n      httpResponse['statusText'] = arg.response.statusText;\r\n      httpResponse['response'] = arg.response;\r\n      config.success(httpResponse);\r\n    }\r\n\r\n    function errorFn(response: HttpErrorResponse) {\r\n      if (response instanceof Error) {\r\n        throw response; // program error; nothing we can do\r\n      } else {\r\n        let data: any;\r\n        if (response.error instanceof HttpResponse) {\r\n          data = response.error.body;\r\n        } else if (response.error instanceof Error) {\r\n          data = response.error.message;\r\n        } else {\r\n          data = response.error;\r\n        }\r\n\r\n        // Timeout appears as an error with status===0 and no data.\r\n        if (response.status === 0 && data == null) {\r\n          data = 'timeout';\r\n        }\r\n\r\n        let errorMessage = response.status + \": \" + response.statusText;\r\n        if (data && typeof data === 'object') {\r\n          data[\"message\"] = data[\"message\"] || errorMessage;  // breeze looks at the message property\r\n        }\r\n        if (!data) {\r\n          data = errorMessage;   // Return the error message as data\r\n        }\r\n        let httpResponse: BreezeHttpResponse = {\r\n          config: requestInfo.request,\r\n          data: data,\r\n          getHeaders: makeGetHeaders(response.headers),\r\n          status: response.status\r\n        };\r\n        httpResponse['ngConfig'] = requestInfo.request;\r\n        httpResponse['statusText'] = response.statusText;\r\n        httpResponse['response'] = response;\r\n\r\n        config.error(httpResponse); // send error to breeze error handler\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n\r\n///// Helpers ////\r\n\r\nfunction makeGetHeaders(headers: HttpHeaders) {\r\n  return function getHeaders(headerName?: string) { return headers.getAll(headerName).join('\\r\\n'); };\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './adapter-ajax-httpclient';\n"],"names":[],"mappings":"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"}