UNPKG

@trim21/gm-fetch

Version:
1 lines 11.3 kB
{"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["export function parseRawHeaders(h: string): Headers {\n const s = h.trim();\n if (!s) {\n return new Headers();\n }\n\n const array: [string, string][] = s.split(\"\\r\\n\").map((value) => {\n let s = value.split(\":\");\n return [s[0].trim(), s[1].trim()];\n });\n\n return new Headers(array);\n}\n\nexport function parseGMResponse(req: Request, res: GM.Response<any>): Response {\n // workaround TamperMonkey bug(?) where sometimes response is string despite responseType being \"blob\"\n const headers = parseRawHeaders(res.responseHeaders);\n const body =\n typeof res.response === \"string\"\n ? new Blob([res.response], { type: headers.get(\"Content-Type\") || \"text/plain\" })\n : (res.response as Blob);\n return new ResImpl(body, {\n statusCode: res.status,\n statusText: res.statusText,\n headers,\n finalUrl: res.finalUrl,\n redirected: res.finalUrl === req.url,\n });\n}\n\ninterface ResInit {\n redirected: boolean;\n headers: Headers;\n statusCode: number;\n statusText: string;\n finalUrl: string;\n}\n\nclass ResImpl implements Response {\n private _bodyUsed: boolean;\n private readonly rawBody: Blob;\n private readonly init: ResInit;\n\n readonly body: ReadableStream<Uint8Array> | null;\n readonly headers: Headers;\n readonly redirected: boolean;\n readonly status: number;\n readonly statusText: string;\n readonly type: ResponseType;\n readonly url: string;\n\n constructor(body: Blob, init: ResInit) {\n this.rawBody = body;\n this.init = init;\n\n this.body = body.stream();\n const { headers, statusCode, statusText, finalUrl, redirected } = init;\n this.headers = headers;\n this.status = statusCode;\n this.statusText = statusText;\n this.url = finalUrl;\n this.type = \"basic\";\n this.redirected = redirected;\n this._bodyUsed = false;\n }\n\n get bodyUsed(): boolean {\n return this._bodyUsed;\n }\n\n get ok(): boolean {\n return this.status < 300;\n }\n\n arrayBuffer(): Promise<ArrayBuffer> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'arrayBuffer' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n return this.rawBody.arrayBuffer();\n }\n\n blob(): Promise<Blob> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'blob' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n // `slice` will use empty string as default value, so need to pass all arguments.\n return Promise.resolve(this.rawBody.slice(0, this.rawBody.size, this.rawBody.type));\n }\n\n clone(): Response {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'clone' on 'Response': body stream already read\");\n }\n return new ResImpl(this.rawBody, this.init);\n }\n\n formData(): Promise<FormData> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'formData' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n return this.rawBody.text().then(decode);\n }\n\n async json(): Promise<any> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'json' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n return JSON.parse(await this.rawBody.text());\n }\n\n text(): Promise<string> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'text' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n return this.rawBody.text();\n }\n\n async bytes(): Promise<Uint8Array> {\n if (this.bodyUsed) {\n throw new TypeError(\"Failed to execute 'bytes' on 'Response': body stream already read\");\n }\n this._bodyUsed = true;\n\n return new Uint8Array(await this.rawBody.arrayBuffer());\n }\n}\n\nfunction decode(body: string) {\n const form = new FormData();\n\n body\n .trim()\n .split(\"&\")\n .forEach(function (bytes) {\n if (bytes) {\n const split = bytes.split(\"=\");\n const name = split.shift()?.replace(/\\+/g, \" \");\n const value = split.join(\"=\").replace(/\\+/g, \" \");\n form.append(decodeURIComponent(name!), decodeURIComponent(value));\n }\n });\n\n return form;\n}\n","import { parseGMResponse } from \"./utils\";\n\nexport default async function GM_fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const request = new Request(input, init);\n\n let data: string | undefined;\n if (init?.body) {\n data = await request.text();\n }\n\n return await XHR(request, init, data);\n}\n\nfunction XHR(request: Request, init: RequestInit | undefined, data: string | undefined): Promise<Response> {\n return new Promise((resolve, reject) => {\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException(\"Aborted\", \"AbortError\"));\n }\n\n GM.xmlHttpRequest({\n url: request.url,\n method: gmXHRMethod(request.method.toUpperCase()),\n headers: Object.fromEntries(new Headers(init?.headers).entries()),\n data: data,\n responseType: \"blob\",\n onload(res) {\n try {\n resolve(parseGMResponse(request, res));\n } catch (e) {\n reject(e);\n }\n },\n onabort() {\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n },\n ontimeout() {\n reject(new TypeError(\"Network request failed, timeout\"));\n },\n onerror(err) {\n reject(new TypeError(\"Failed to fetch: \" + err.finalUrl));\n },\n });\n });\n}\n\nconst httpMethods = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"HEAD\", \"TRACE\", \"OPTIONS\", \"CONNECT\"] as const;\n\n// a ts type helper to narrow type\nfunction includes<T extends U, U>(array: ReadonlyArray<T>, element: U): element is T {\n return array.includes(element as T);\n}\n\nfunction gmXHRMethod(method: string): (typeof httpMethods)[number] {\n if (includes(httpMethods, method)) {\n return method;\n }\n\n throw new Error(`unsupported http method ${method}`);\n}\n"],"names":[],"mappings":"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"}