mappersmith
Version:
It is a lightweight rest client for node.js and the browser
1 lines • 8.69 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["import type { Primitive, NestedParam, Hash, NestedParamArray } from '../types'\n\nlet _process: NodeJS.Process,\n getNanoSeconds: (() => number) | undefined,\n loadTime: number | undefined\n\ntry {\n // eslint-disable-next-line no-eval\n _process = eval(\n 'typeof __TEST_WEB__ === \"undefined\" && typeof process === \"object\" ? process : undefined'\n )\n} catch (e) {} // eslint-disable-line no-empty\n\nconst hasProcessHrtime = () => {\n return typeof _process !== 'undefined' && _process !== null && _process.hrtime\n}\n\nif (hasProcessHrtime()) {\n getNanoSeconds = () => {\n const hr = _process.hrtime()\n return hr[0] * 1e9 + hr[1]\n }\n loadTime = getNanoSeconds()\n}\n\nconst R20 = /%20/g\n\nconst isNeitherNullNorUndefined = <T>(x: T | undefined | null): x is T =>\n x !== null && x !== undefined\n\nexport const validKeys = (entry: Record<string, unknown>) =>\n Object.keys(entry).filter((key) => isNeitherNullNorUndefined(entry[key]))\n\nexport const buildRecursive = (\n key: string,\n value: Primitive | NestedParam | NestedParamArray,\n suffix = '',\n encoderFn = encodeURIComponent\n): string => {\n if (Array.isArray(value)) {\n return value.map((v) => buildRecursive(key, v, suffix + '[]', encoderFn)).join('&')\n }\n\n if (typeof value !== 'object') {\n return `${encoderFn(key + suffix)}=${encoderFn(value)}`\n }\n\n return Object.keys(value)\n .map((nestedKey) => {\n const nestedValue = value[nestedKey]\n if (isNeitherNullNorUndefined(nestedValue)) {\n return buildRecursive(key, nestedValue, suffix + '[' + nestedKey + ']', encoderFn)\n }\n return null\n })\n .filter(isNeitherNullNorUndefined)\n .join('&')\n}\n\nexport const toQueryString = (\n entry: undefined | null | Primitive | NestedParam,\n encoderFn = encodeURIComponent\n) => {\n if (!isPlainObject(entry)) {\n return entry\n }\n\n return Object.keys(entry)\n .map((key) => {\n const value = entry[key]\n if (isNeitherNullNorUndefined(value)) {\n return buildRecursive(key, value, '', encoderFn)\n }\n return null\n })\n .filter(isNeitherNullNorUndefined)\n .join('&')\n .replace(R20, '+')\n}\n\n/**\n * Gives time in milliseconds, but with sub-millisecond precision for Browser\n * and Nodejs\n */\nexport const performanceNow = () => {\n if (hasProcessHrtime() && getNanoSeconds !== undefined) {\n const now = getNanoSeconds()\n if (now !== undefined && loadTime !== undefined) {\n return (now - loadTime) / 1e6\n }\n }\n\n return Date.now()\n}\n\n/**\n * borrowed from: {@link https://gist.github.com/monsur/706839}\n * XmlHttpRequest's getAllResponseHeaders() method returns a string of response\n * headers according to the format described here:\n * {@link http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method}\n * This method parses that string into a user-friendly key/value pair object.\n */\nexport const parseResponseHeaders = (headerStr: string) => {\n const headers: Hash = {}\n if (!headerStr) {\n return headers\n }\n\n const headerPairs = headerStr.split('\\u000d\\u000a')\n for (let i = 0; i < headerPairs.length; i++) {\n const headerPair = headerPairs[i]\n // Can't use split() here because it does the wrong thing\n // if the header value has the string \": \" in it.\n const index = headerPair.indexOf('\\u003a\\u0020')\n if (index > 0) {\n const key = headerPair.substring(0, index).toLowerCase().trim()\n const val = headerPair.substring(index + 2).trim()\n headers[key] = val\n }\n }\n return headers\n}\n\nexport const lowerCaseObjectKeys = (obj: Hash) => {\n return Object.keys(obj).reduce((target, key) => {\n target[key.toLowerCase()] = obj[key]\n return target\n }, {} as Hash)\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nexport const assign =\n Object.assign ||\n function (target: Hash) {\n for (let i = 1; i < arguments.length; i++) {\n // eslint-disable-next-line prefer-rest-params\n const source = arguments[i]\n for (const key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n return target\n }\n\nconst toString = Object.prototype.toString\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return (\n toString.call(value) === '[object Object]' &&\n Object.getPrototypeOf(value) === Object.getPrototypeOf({})\n )\n}\n\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * borrowed from: {@link https://github.com/davidchambers/Base64.js}\n */\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nexport const btoa = (input: object | Primitive | null) => {\n let output = ''\n let map = CHARS\n const str = String(input)\n for (\n // initialize result and counter\n let block = 0, charCode: number, idx = 0;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || ((map = '='), idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & (block >> (8 - (idx % 1) * 8)))\n ) {\n charCode = str.charCodeAt((idx += 3 / 4))\n if (charCode > 0xff) {\n throw new Error(\n \"[Mappersmith] 'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\"\n )\n }\n block = (block << 8) | charCode\n }\n return output\n}\n"],"mappings":"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","names":[]}