UNPKG

get-it

Version:

Generic HTTP request library for node, browsers and workers

1 lines 5.83 kB
{"version":3,"file":"_commonjsHelpers.cjs","sources":["../../src/middleware/defaultOptionsProcessor.ts","../../src/middleware/defaultOptionsValidator.ts"],"sourcesContent":["import type {MiddlewareHooks, RequestOptions} from 'get-it'\n\nconst isReactNative = typeof navigator === 'undefined' ? false : navigator.product === 'ReactNative'\n\nconst defaultOptions = {timeout: isReactNative ? 60000 : 120000} satisfies Partial<RequestOptions>\n\n/** @public */\nexport const processOptions = function processOptions(opts) {\n const options = {\n ...defaultOptions,\n ...(typeof opts === 'string' ? {url: opts} : opts),\n } satisfies RequestOptions\n\n // Normalize timeouts\n options.timeout = normalizeTimeout(options.timeout)\n\n // Shallow-merge (override) existing query params\n if (options.query) {\n const {url, searchParams} = splitUrl(options.url)\n\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n for (const v of value) {\n searchParams.append(key, v as string)\n }\n } else {\n searchParams.append(key, value as string)\n }\n }\n\n // Merge back params into url\n const search = searchParams.toString()\n if (search) {\n options.url = `${url}?${search}`\n }\n }\n }\n\n // Implicit POST if we have not specified a method but have a body\n options.method =\n options.body && !options.method ? 'POST' : (options.method || 'GET').toUpperCase()\n\n return options\n} satisfies MiddlewareHooks['processOptions']\n\n/**\n * Given a string URL, extracts the query string and URL from each other, and returns them.\n * Note that we cannot use the `URL` constructor because of old React Native versions which are\n * majorly broken and returns incorrect results:\n *\n * (`new URL('http://foo/?a=b').toString()` == 'http://foo/?a=b/')\n */\nfunction splitUrl(url: string): {url: string; searchParams: URLSearchParams} {\n const qIndex = url.indexOf('?')\n if (qIndex === -1) {\n return {url, searchParams: new URLSearchParams()}\n }\n\n const base = url.slice(0, qIndex)\n const qs = url.slice(qIndex + 1)\n\n // React Native's URL and URLSearchParams are broken, so passing a string to URLSearchParams\n // does not work, leading to an empty query string. For other environments, this should be enough\n if (!isReactNative) {\n return {url: base, searchParams: new URLSearchParams(qs)}\n }\n\n // Sanity-check; we do not know of any environment where this is the case,\n // but if it is, we should not proceed without giving a descriptive error\n if (typeof decodeURIComponent !== 'function') {\n throw new Error(\n 'Broken `URLSearchParams` implementation, and `decodeURIComponent` is not defined',\n )\n }\n\n const params = new URLSearchParams()\n for (const pair of qs.split('&')) {\n const [key, value] = pair.split('=')\n if (key) {\n params.append(decodeQueryParam(key), decodeQueryParam(value || ''))\n }\n }\n\n return {url: base, searchParams: params}\n}\n\nfunction decodeQueryParam(value: string): string {\n return decodeURIComponent(value.replace(/\\+/g, ' '))\n}\n\nfunction normalizeTimeout(time: RequestOptions['timeout']) {\n if (time === false || time === 0) {\n return false\n }\n\n if (time.connect || time.socket) {\n return time\n }\n\n const delay = Number(time)\n if (isNaN(delay)) {\n return normalizeTimeout(defaultOptions.timeout)\n }\n\n return {connect: delay, socket: delay}\n}\n","import type {MiddlewareHooks} from 'get-it'\n\nconst validUrl = /^https?:\\/\\//i\n\n/** @public */\nexport const validateOptions = function validateOptions(options) {\n if (!validUrl.test(options.url)) {\n throw new Error(`\"${options.url}\" is not a valid URL`)\n }\n} satisfies MiddlewareHooks['validateOptions']\n"],"names":["isReactNative","navigator","product","defaultOptions","timeout","decodeQueryParam","value","decodeURIComponent","replace","normalizeTimeout","time","connect","socket","delay","Number","isNaN","validUrl","x","opts","options","url","query","searchParams","qIndex","indexOf","URLSearchParams","base","slice","qs","Error","params","pair","split","key","append","splitUrl","Object","entries","Array","isArray","v","search","toString","method","body","toUpperCase","test"],"mappings":"aAEA,MAAMA,WAAuBC,UAAc,MAA4C,gBAAtBA,UAAUC,QAErEC,EAAiB,CAACC,QAASJ,EAAgB,IAAQ,MAmFzD,SAASK,EAAiBC,GACxB,OAAOC,mBAAmBD,EAAME,QAAQ,MAAO,KACjD,CAEA,SAASC,EAAiBC,GACxB,IAAa,IAATA,GAA2B,IAATA,EACpB,OAAO,EAGT,GAAIA,EAAKC,SAAWD,EAAKE,OACvB,OAAOF,EAGT,MAAMG,EAAQC,OAAOJ,GACrB,OAAIK,MAAMF,GACDJ,EAAiBN,EAAeC,SAGlC,CAACO,QAASE,EAAOD,OAAQC,EAClC,CCxGA,MAAMG,EAAW,0BAOjB,SAAAC,oGDF8B,SAAwBC,GACpD,MAAMC,EAAU,IACXhB,KACiB,iBAATe,EAAoB,CAACE,IAAKF,GAAQA,GAO/C,GAHAC,EAAQf,QAAUK,EAAiBU,EAAQf,SAGvCe,EAAQE,MAAO,CACjB,MAAMD,IAACA,EAAAE,aAAKA,GAmChB,SAAkBF,GAChB,MAAMG,EAASH,EAAII,QAAQ,KAC3B,IAAe,IAAXD,EACF,MAAO,CAACH,MAAKE,aAAc,IAAIG,iBAGjC,MAAMC,EAAON,EAAIO,MAAM,EAAGJ,GACpBK,EAAKR,EAAIO,MAAMJ,EAAS,GAI9B,IAAKvB,EACH,MAAO,CAACoB,IAAKM,EAAMJ,aAAc,IAAIG,gBAAgBG,IAKvD,GAAkC,mBAAvBrB,mBACT,MAAM,IAAIsB,MACR,oFAIJ,MAAMC,EAAS,IAAIL,gBACnB,IAAA,MAAWM,KAAQH,EAAGI,MAAM,KAAM,CAChC,MAAOC,EAAK3B,GAASyB,EAAKC,MAAM,KAC5BC,GACFH,EAAOI,OAAO7B,EAAiB4B,GAAM5B,EAAiBC,GAAS,IAAG,CAItE,MAAO,CAACc,IAAKM,EAAMJ,aAAcQ,EACnC,CAnEgCK,CAAShB,EAAQC,KAE7C,IAAA,MAAYa,EAAK3B,KAAU8B,OAAOC,QAAQlB,EAAQE,OAAQ,CACxD,QAAc,IAAVf,EACF,GAAIgC,MAAMC,QAAQjC,GAChB,IAAA,MAAWkC,KAAKlC,EACdgB,EAAaY,OAAOD,EAAKO,QAG3BlB,EAAaY,OAAOD,EAAK3B,GAK7B,MAAMmC,EAASnB,EAAaoB,WACxBD,IACFtB,EAAQC,IAAM,GAAGA,KAAOqB,IAAM,CAElC,CAIF,OAAAtB,EAAQwB,OACNxB,EAAQyB,OAASzB,EAAQwB,OAAS,QAAUxB,EAAQwB,QAAU,OAAOE,cAEhE1B,CACT,YCvC+B,SAAyBA,GACtD,IAAKH,EAAS8B,KAAK3B,EAAQC,KACzB,MAAM,IAAIS,MAAM,IAAIV,EAAQC,0BAEhC"}