{"version":3,"file":"breeze-client-adapter-ajax-fetch.mjs","sources":["../../src/adapter-core.ts","../../src/adapter-ajax-fetch.ts","../../src/breeze-client-adapter-ajax-fetch.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 { AjaxAdapter, AjaxConfig, AjaxRequestInterceptor, BreezeConfig, config, core } from 'breeze-client';\r\nimport { appendQueryStringParameter, encodeParams } from './adapter-core';\r\n\r\n/** Breeze AJAX adapter using fetch API \r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\r\n*/\r\nexport class AjaxFetchAdapter implements AjaxAdapter {\r\n  static adapterName = \"fetch\";\r\n  name: string;\r\n  defaultSettings: { headers?: { [name: string]: string } };\r\n  requestInterceptor?: AjaxRequestInterceptor;\r\n\r\n  constructor() {\r\n    this.name = AjaxFetchAdapter.adapterName;\r\n    this.defaultSettings = { };\r\n    this.requestInterceptor = undefined;\r\n  }\r\n\r\n  static register(breezeConfig?: BreezeConfig) {\r\n    breezeConfig = breezeConfig || config;\r\n    breezeConfig.registerAdapter(\"ajax\", AjaxFetchAdapter);\r\n    return breezeConfig.initializeAdapterInstance(\"ajax\", AjaxFetchAdapter.adapterName, true) as AjaxFetchAdapter;\r\n  }\r\n\r\n  initialize() {\r\n  }\r\n\r\n  ajax(config: AjaxConfig) {\r\n    if (!fetch) {\r\n      throw new Error(\"fetch API not supported in this browser\");\r\n    }\r\n\r\n    let init: RequestInit = {\r\n      method: config.type, // *GET, POST, PUT, DELETE, etc.\r\n      mode: 'cors', // no-cors, *cors, same-origin\r\n      cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\r\n      credentials: 'include', // include, *same-origin, omit\r\n      headers: {\r\n        'Content-Type': config.contentType || 'application/json',\r\n        // ...config.headers\r\n        // 'Content-Type': 'application/x-www-form-urlencoded',\r\n      },\r\n      redirect: 'follow', // manual, *follow, error\r\n      referrer: 'client', // no-referrer, *client\r\n    };\r\n    if (config.type !== \"GET\" && config.type !== \"HEAD\") {\r\n      // body data type must match \"Content-Type\" header\r\n      // let data = config.params || config.data;\r\n      let data = config.data;\r\n      if (typeof(data) !== \"string\") {\r\n        data = JSON.stringify(data);\r\n      }\r\n      init.body = data;\r\n    }\r\n\r\n    let url = config.url;\r\n    if (!core.isEmpty(config.params)) {\r\n      // Hack: Not sure how Fetch handles writing 'search' parameters to the url.\r\n      // so this approach takes over the url param writing completely.\r\n      url = appendQueryStringParameter(url, encodeParams(config.params));\r\n    }\r\n\r\n    if (!core.isEmpty(this.defaultSettings)) {\r\n      let compositeConfig = core.extend({}, this.defaultSettings);\r\n      init = core.extend(compositeConfig, init) as any;\r\n      // extend is shallow; extend headers separately\r\n      let headers = core.extend({}, this.defaultSettings.headers); // copy default headers 1st\r\n      init.headers = core.extend(headers, init.headers) as any;\r\n    }\r\n\r\n    let requestInfo = {\r\n      adapter: this,      // this adapter\r\n      config: init,   // fetch api 'init' object\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      let ri = this.requestInterceptor as any;\r\n      ri(requestInfo);\r\n      if (ri.oneTime) {\r\n        this.requestInterceptor = undefined;\r\n      }\r\n    }\r\n\r\n    if (requestInfo.config) { // exists unless requestInterceptor killed it.\r\n      fetch(url, requestInfo.config).then(response => {\r\n        if (!response.ok) {\r\n          response.text().then(s => {\r\n            requestInfo.error(response.status, response.statusText, s, response, null);\r\n          });\r\n        } else {\r\n          response.json().then(j => {\r\n            requestInfo.success(j, response.statusText, response);\r\n          });\r\n        }\r\n      }).catch(err => {\r\n        requestInfo.error(0, err && err.message || err, null, null, err);\r\n      });\r\n    }\r\n\r\n    function successFn(data: any, statusText: string, response: Response) {\r\n      let httpResponse = {\r\n        config: config,\r\n        data: data,\r\n        getHeaders: getHeadersFn(response),\r\n        status: response.status,\r\n        statusText: statusText\r\n      };\r\n      config.success(httpResponse);\r\n    }\r\n\r\n    function errorFn(status: number, statusText: string, body: string, response: Response, errorThrown: any) {\r\n      let httpResponse = {\r\n        config: config,\r\n        data: body,\r\n        error: errorThrown || statusText,\r\n        getHeaders: getHeadersFn(response),\r\n        status: status,\r\n        statusText: statusText\r\n      };\r\n      config.error(httpResponse);\r\n    }\r\n  }\r\n}\r\n\r\nconfig.registerAdapter(\"ajax\", AjaxFetchAdapter);\r\n\r\nfunction getHeadersFn(response: Response): any {\r\n  if (!response || response.status === 0) { // timeout or abort; no headers\r\n    return function (headerName: string) {\r\n      return (headerName && headerName.length > 0) ? \"\" : {};\r\n    };\r\n  } else {\r\n    return function (headerName: string) {\r\n      if (headerName && headerName.length > 0) {\r\n        return response.headers.get(headerName);\r\n      }\r\n      let hob = {};\r\n      response.headers.forEach((val, key) => {\r\n        hob[key] = val;\r\n      });\r\n      return hob;\r\n    };\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './adapter-ajax-fetch';\n"],"names":[],"mappings":"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"}