{"version":3,"file":"fetch_request-bSzARCYm.js","sources":["../../../node_modules/@rails/request.js/src/fetch_response.js","../../../node_modules/@rails/request.js/src/request_interceptor.js","../../../node_modules/@rails/request.js/src/lib/utils.js","../../../node_modules/@rails/request.js/src/fetch_request.js"],"sourcesContent":["export class FetchResponse {\n constructor (response) {\n this.response = response\n }\n\n get statusCode () {\n return this.response.status\n }\n\n get redirected () {\n return this.response.redirected\n }\n\n get ok () {\n return this.response.ok\n }\n\n get unauthenticated () {\n return this.statusCode === 401\n }\n\n get unprocessableEntity () {\n return this.statusCode === 422\n }\n\n get authenticationURL () {\n return this.response.headers.get('WWW-Authenticate')\n }\n\n get contentType () {\n const contentType = this.response.headers.get('Content-Type') || ''\n\n return contentType.replace(/;.*$/, '')\n }\n\n get headers () {\n return this.response.headers\n }\n\n get html () {\n if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n return this.text\n }\n\n return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n }\n\n get json () {\n if (this.contentType.match(/^application\\/.*json$/)) {\n return this.responseJson || (this.responseJson = this.response.json())\n }\n\n return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n }\n\n get text () {\n return this.responseText || (this.responseText = this.response.text())\n }\n\n get isTurboStream () {\n return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n }\n\n async renderTurboStream () {\n if (this.isTurboStream) {\n if (window.Turbo) {\n await window.Turbo.renderStreamMessage(await this.text)\n } else {\n console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n }\n } else {\n return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n }\n }\n}\n","export class RequestInterceptor {\n static register (interceptor) {\n this.interceptor = interceptor\n }\n\n static get () {\n return this.interceptor\n }\n\n static reset () {\n this.interceptor = undefined\n }\n}\n","export function getCookie (name) {\n const cookies = document.cookie ? document.cookie.split('; ') : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split('=').slice(1).join('=')\n\n if (value) {\n return decodeURIComponent(value)\n }\n }\n}\n\nexport function compact (object) {\n const result = {}\n\n for (const key in object) {\n const value = object[key]\n if (value !== undefined) {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n return [...formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n for (const [name, value] of entries) {\n if (value instanceof window.File) continue\n\n if (searchParams.has(name)) {\n searchParams.delete(name)\n searchParams.set(name, value)\n } else {\n searchParams.append(name, value)\n }\n }\n}\n","import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n constructor (method, url, options = {}) {\n this.method = method\n this.options = options\n this.originalUrl = url.toString()\n }\n\n async perform () {\n try {\n const requestInterceptor = RequestInterceptor.get()\n if (requestInterceptor) {\n await requestInterceptor(this)\n }\n } catch (error) {\n console.error(error)\n }\n\n const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n if (response.unauthenticated && response.authenticationURL) {\n return Promise.reject(window.location.href = response.authenticationURL)\n }\n\n if (response.ok && response.isTurboStream) {\n await response.renderTurboStream()\n }\n\n return response\n }\n\n addHeader (key, value) {\n const headers = this.additionalHeaders\n headers[key] = value\n this.options.headers = headers\n }\n\n get fetchOptions () {\n return {\n method: this.method.toUpperCase(),\n headers: this.headers,\n body: this.formattedBody,\n signal: this.signal,\n credentials: 'same-origin',\n redirect: this.redirect\n }\n }\n\n get headers () {\n return compact(\n Object.assign({\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-Token': this.csrfToken,\n 'Content-Type': this.contentType,\n Accept: this.accept\n },\n this.additionalHeaders)\n )\n }\n\n get csrfToken () {\n return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n }\n\n get contentType () {\n if (this.options.contentType) {\n return this.options.contentType\n } else if (this.body == null || this.body instanceof window.FormData) {\n return undefined\n } else if (this.body instanceof window.File) {\n return this.body.type\n }\n\n return 'application/json'\n }\n\n get accept () {\n switch (this.responseKind) {\n case 'html':\n return 'text/html, application/xhtml+xml'\n case 'turbo-stream':\n return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n case 'json':\n return 'application/json, application/vnd.api+json'\n default:\n return '*/*'\n }\n }\n\n get body () {\n return this.options.body\n }\n\n get query () {\n const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n const params = new URLSearchParams(originalQuery)\n\n let requestQuery = this.options.query\n if (requestQuery instanceof window.FormData) {\n requestQuery = stringEntriesFromFormData(requestQuery)\n } else if (requestQuery instanceof window.URLSearchParams) {\n requestQuery = requestQuery.entries()\n } else {\n requestQuery = Object.entries(requestQuery || {})\n }\n\n mergeEntries(params, requestQuery)\n\n const query = params.toString()\n return (query.length > 0 ? `?${query}` : '')\n }\n\n get url () {\n return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n }\n\n get responseKind () {\n return this.options.responseKind || 'html'\n }\n\n get signal () {\n return this.options.signal\n }\n\n get redirect () {\n return this.options.redirect || 'follow'\n }\n\n get additionalHeaders () {\n return this.options.headers || {}\n }\n\n get formattedBody () {\n const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n if (contentTypeIsJson && !bodyIsAString) {\n return JSON.stringify(this.body)\n }\n\n return this.body\n }\n}\n"],"names":["FetchResponse","response","RequestInterceptor","interceptor","getCookie","name","cookies","prefix","cookie","value","compact","object","result","key","metaContent","element","stringEntriesFromFormData","formData","entries","mergeEntries","searchParams","FetchRequest","method","url","options","requestInterceptor","error","headers","originalQuery","params","requestQuery","query","bodyIsAString"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}