UNPKG

gm-extra

Version:
1 lines 28.1 kB
{"version":3,"sources":["../src/async_query.ts","../src/axios.ts","../src/util.ts","../src/fetch.ts","../src/intercept_all.ts","../src/intercept_fetch.ts","../src/intercept_xhr.ts"],"sourcesContent":["export type SelectorOptions = {\n timeout?: number;\n};\n\nexport async function querySelector<K extends keyof HTMLElementTagNameMap>(\n root: ParentNode,\n selectors: K,\n options?: SelectorOptions,\n): Promise<HTMLElementTagNameMap[K] | null>;\nexport async function querySelector<K extends keyof SVGElementTagNameMap>(\n root: ParentNode,\n selectors: K,\n options?: SelectorOptions,\n): Promise<SVGElementTagNameMap[K] | null>;\nexport async function querySelector<E extends Element = Element>(\n root: ParentNode,\n selectors: string,\n options?: SelectorOptions,\n): Promise<E | null> {\n const node = root.querySelector<E>(selectors);\n if (node) {\n return node;\n }\n return new Promise<E | null>((res) => {\n let task: number | undefined = undefined;\n const observer = new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (mutation.target instanceof Element) {\n const node = mutation.target.querySelector<E>(selectors);\n if (node) {\n observer.disconnect();\n window.clearTimeout(task);\n return res(node);\n }\n }\n }\n });\n observer.observe(root, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n if (options?.timeout !== undefined) {\n task = window.setTimeout(\n () => {\n observer.disconnect();\n res(null);\n },\n options?.timeout,\n );\n }\n });\n}\n\nexport async function querySelectorAll<K extends keyof HTMLElementTagNameMap>(\n root: ParentNode,\n selectors: K,\n options?: SelectorOptions,\n): Promise<NodeListOf<HTMLElementTagNameMap[K]>>;\nexport async function querySelectorAll<K extends keyof SVGElementTagNameMap>(\n root: ParentNode,\n selectors: K,\n options?: SelectorOptions,\n): Promise<NodeListOf<SVGElementTagNameMap[K]>>;\nexport async function querySelectorAll<E extends Element = Element>(\n root: ParentNode,\n selectors: string,\n options?: SelectorOptions,\n): Promise<NodeListOf<E>> {\n const nodes = root.querySelectorAll<E>(selectors);\n if (nodes.length > 0) {\n return nodes;\n }\n return new Promise<NodeListOf<E>>((res) => {\n let task: number | undefined = undefined;\n const observer = new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n if (mutation.target instanceof Element) {\n const nodes = mutation.target.querySelectorAll<E>(selectors);\n nodes.length;\n if (nodes.length > 0) {\n observer.disconnect();\n window.clearTimeout(task);\n return res(nodes);\n }\n }\n }\n });\n observer.observe(root, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n if (options?.timeout !== undefined) {\n task = window.setTimeout(\n () => {\n observer.disconnect();\n const nodes = document.createDocumentFragment()\n .childNodes as NodeListOf<E>;\n res(nodes);\n },\n options?.timeout,\n );\n }\n });\n}\n","import type { AxiosAdapter } from 'axios';\nimport { GM_xmlhttpRequest } from 'vite-plugin-monkey/dist/client';\nimport type { GmResponseEvent } from './types';\nimport { headersToObj, parseHeaders } from './util';\n\nexport const gmAxiosAdapter: AxiosAdapter = async (config) => {\n const u = new URL(config.url ?? ``, config.baseURL);\n if (config.params) {\n for (const k in config.params) {\n const v = config.params[k];\n if (v !== void 0) {\n u.searchParams.set(k, String(v));\n }\n }\n }\n const headers = config.headers.toJSON(true) as Record<string, string>;\n const event = await new Promise<GmResponseEvent>((res, rej) => {\n GM_xmlhttpRequest({\n method: config.method,\n url: u.href,\n headers,\n data: config.data,\n timeout: config.timeout,\n responseType: config.responseType,\n onload: res,\n onerror: rej,\n });\n });\n\n return {\n status: event.status,\n statusText: event.statusText,\n headers: headersToObj(parseHeaders(event.responseHeaders)),\n data: event.response || event.responseText,\n config,\n };\n};\n","import { GM_info } from 'vite-plugin-monkey/dist/client';\nimport type { AnyFunction } from './types';\n\nexport const delay = async (n = 0) =>\n new Promise((res) => {\n setTimeout(res, n);\n });\n\n\n/**\n * lazy side effect by `__PURE__` comment\n */\nexport const lazy = <T extends object>(fn: () => T) => {\n let temp: T | undefined = undefined;\n let o = {\n get k() {\n if (temp === undefined) {\n temp = fn();\n }\n return temp;\n },\n };\n const wm = lazyValue(() => new WeakMap<AnyFunction, AnyFunction>());\n return new Proxy({} as T, {\n get(_, p, receiver) {\n const v = Reflect.get(o.k, p, receiver);\n if (typeof v == 'function') {\n const f = v as AnyFunction;\n let fBind = wm.value.get(f);\n if (fBind === undefined) {\n fBind = f.bind(o.k);\n wm.value.set(f, fBind);\n }\n return fBind;\n }\n return v;\n },\n set(_, p, newValue, receiver) {\n return Reflect.set(o.k, p, newValue, receiver);\n },\n has(_, p) {\n return Reflect.has(o.k, p);\n },\n ownKeys() {\n return Reflect.ownKeys(o.k);\n },\n isExtensible() {\n return Reflect.isExtensible(o.k);\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(o.k, p);\n },\n setPrototypeOf(_, v) {\n return Reflect.setPrototypeOf(o.k, v);\n },\n getOwnPropertyDescriptor(_, p) {\n return Reflect.getOwnPropertyDescriptor(o.k, p);\n },\n defineProperty(_, property, attributes) {\n return Reflect.defineProperty(o.k, property, attributes);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(o.k);\n },\n preventExtensions() {\n return Reflect.preventExtensions(o.k);\n },\n apply(_, thisArg, argArray) {\n // @ts-ignore\n return Reflect.apply(o.k, thisArg, argArray);\n },\n construct(_, argArray, newTarget) {\n // @ts-ignore\n return Reflect.construct(o.k, argArray, newTarget);\n },\n });\n};\n\n\nconst lazyValuePlaceholder = {};\nexport const lazyValue = <T>(fn: () => T) => {\n let temp: T | typeof lazyValuePlaceholder = lazyValuePlaceholder;\n return {\n get value() {\n if (temp === lazyValuePlaceholder) {\n temp = fn();\n }\n return temp as T;\n },\n };\n};\n\n/**\n * https://github.com/github/fetch/blob/fb5b0cf42b470faf8c5448ab461d561f34380a30/fetch.js#L422\n */\nexport const parseHeaders = (rawHeaders = '') => {\n const headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n const preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function (header) {\n return header.startsWith(`\\n`) ? header.substring(1) : header;\n })\n .forEach(function (line) {\n let parts = line.split(':');\n let key = parts.shift()?.trim();\n if (key) {\n let value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers;\n};\n\n/**\n * https://github.com/github/fetch/blob/master/fetch.js\n */\nexport const fixUrl = (url = '') => {\n try {\n return url === '' && location.href ? location.href : url;\n } catch {\n return url;\n }\n};\n\nexport const headersToObj = (headers: Headers): Record<string, string> => {\n const obj: Record<string, string> = {};\n headers.forEach((value, key) => {\n obj[key] = value;\n });\n return obj;\n};\n\nexport const reverseForm = (formData: FormData): FormData => {\n const reversedForm = new FormData();\n const reversedList: [string, FormDataEntryValue][] = [];\n formData.forEach((v, k) => {\n reversedList.push([k, v]);\n });\n reversedList.reverse().forEach(([k, v]) => {\n reversedForm.append(k, v);\n });\n return reversedForm;\n};\n\nexport const compatForm = (formData: FormData, headers: Headers) => {\n headers.delete(`content-type`);\n if (GM_info.scriptHandler == `Tampermonkey`) {\n // https://github.com/Tampermonkey/tampermonkey/issues/1783\n return reverseForm(formData);\n }\n return formData;\n};","import {\n GM_xmlhttpRequest,\n type GmXhrRequest,\n} from 'vite-plugin-monkey/dist/client';\nimport { delay, parseHeaders, fixUrl, compatForm, headersToObj } from './util';\n\n/**\n * simulate window.fetch with GM_xmlhttpRequest\n *\n * because [Request](https://developer.mozilla.org/en-US/docs/Web/API/Request) will delete [Forbidden_header_name](https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name)\n *\n * so you must manually modify these headers by set the second parameter of gmFetch\n * @example\n * gmFetch(\n * new Request('https://www.pixiv.net/', {\n * headers: { referer: 'https://www.pixiv.net/' }, // it will not work !!!\n * }),\n * );\n * gmFetch(new Request('https://www.pixiv.net/'), {\n * headers: { referer: 'https://www.pixiv.net/' }, // it will work\n * headers: new Headers({ referer: 'https://www.pixiv.net/' }), // it will also work\n * });\n */\nexport const gmFetch = async (\n input: RequestInfo | URL,\n init: RequestInit = {},\n xhrDetails: Partial<GmXhrRequest<unknown, 'blob'>> | ((arg: GmXhrRequest<unknown, 'blob'>) => GmXhrRequest<unknown, 'blob'>) = {},\n): Promise<Response> => {\n const request = new Request(input, init);\n if (request.signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const method = request.method.toUpperCase();\n const url = fixUrl(request.url);\n\n // headers\n const sendHeaders = new Headers(request.headers);\n new Headers(init.headers).forEach((value, key) => {\n sendHeaders.set(key, value);\n });\n\n let binary = false;\n let data: URLSearchParams | FormData | Blob | string | undefined = undefined;\n\n if (method != 'GET') {\n if (init.body) {\n if (init.body instanceof FormData) {\n data = compatForm(init.body, sendHeaders);\n } else if (\n typeof init.body == 'string' ||\n init.body instanceof URLSearchParams\n ) {\n data = init.body;\n } else {\n binary = true;\n data = await request.blob();\n }\n } else {\n const formData = await request\n .clone()\n .formData()\n .catch(() => {});\n if (formData) {\n data = compatForm(formData, sendHeaders);\n }\n }\n }\n return new Promise<Response>((resolve, reject) => {\n let initXhrDetails: GmXhrRequest<unknown, 'blob'> = {\n method,\n url,\n headers: headersToObj(sendHeaders),\n data,\n binary,\n responseType: 'blob',\n async onload(event) {\n let body: BodyInit | null | undefined = undefined;\n if (!(event.response instanceof Blob && event.response.size == 0)) {\n // Response': Response with null body status cannot have body\n body = event.response ?? event.responseText;\n }\n await delay();\n const resp = new Response(body, {\n status: event.status,\n statusText: event.statusText,\n headers: parseHeaders(event.responseHeaders),\n });\n Object.defineProperty(resp, 'url', { value: event.finalUrl });\n resolve(resp);\n },\n async onerror() {\n await delay();\n reject(new TypeError('Network request onerror failed'));\n },\n async ontimeout() {\n await delay();\n reject(new TypeError('Network request ontimeout failed'));\n },\n async onabort() {\n await delay();\n reject(new DOMException('Aborted', 'AbortError'));\n },\n async onreadystatechange(event) {\n if (event.readyState === 4) {\n request.signal?.removeEventListener('abort', abortXhr);\n }\n },\n };\n if (typeof xhrDetails == 'function') {\n initXhrDetails = xhrDetails(initXhrDetails);\n } else {\n initXhrDetails = { ...initXhrDetails, ...xhrDetails };\n }\n const handle = GM_xmlhttpRequest(initXhrDetails);\n function abortXhr() {\n handle.abort();\n }\n request.signal?.addEventListener('abort', abortXhr);\n });\n};\n","export const _TODO = void 0;\n","import { monkeyWindow } from 'vite-plugin-monkey/dist/client';\nimport type { FetchType, IPromise } from './types';\nimport { lazy } from './util';\n\nexport type InterceptorChain = {\n request: Request;\n /**\n * @param request if not set, use chain.request\n */\n proceed: (request?: Request) => IPromise<Response>;\n};\n\nexport type FetchNetInterceptor = (chain: InterceptorChain) => IPromise<Response>;\n\nexport type FetchInterceptorManager = {\n originalFetch: FetchType;\n fakeFetch: FetchType;\n use: (interceptor: FetchNetInterceptor) => number;\n eject: (id: number) => void;\n clear: () => void;\n};\n\nconst produceChain = (\n originalFetch: FetchType,\n interceptors: (FetchNetInterceptor | null)[],\n request: Request,\n index = 0,\n): InterceptorChain => {\n return {\n request,\n proceed: async (req = request) => {\n while (index < interceptors.length) {\n const target = interceptors[index];\n if (target) {\n const chain = produceChain(\n originalFetch,\n interceptors,\n req,\n index + 1,\n );\n return await target(chain);\n }\n index++;\n }\n return originalFetch(req);\n },\n };\n};\n\nexport const buildFetchInterceptorManager = (\n originalFetch: FetchType,\n): FetchInterceptorManager => {\n const interceptors: (FetchNetInterceptor | null)[] = [];\n const fakeFetch: FetchType = async (input, init) => {\n return produceChain(\n originalFetch,\n [...interceptors],\n new Request(input, init),\n ).proceed();\n };\n return {\n originalFetch,\n fakeFetch,\n use: (interceptor: FetchNetInterceptor): number => {\n interceptors.push(interceptor);\n return interceptors.length - 1;\n },\n eject: (id: number) => {\n interceptors[id] = null;\n },\n clear: () => {\n for (let i = 0; i < interceptors.length; i++) {\n interceptors[i] = null;\n }\n },\n };\n};\n\nexport const UnsafeWindowInterceptorManager = /* @__PURE__ */ lazy(() => {\n const t = buildFetchInterceptorManager(monkeyWindow.unsafeWindow.fetch);\n monkeyWindow.unsafeWindow.fetch = t.fakeFetch;\n return t;\n});\n","import type {\n XhrOnloadType,\n XhrOnreadystatechangeType,\n XMLHttpRequestType,\n} from './types';\nimport { parseHeaders } from './util';\n\nconst fakeXhr = (XMLHttpRequestLike: XMLHttpRequestType) => {\n return class FakeXMLHttpRequest extends XMLHttpRequestLike {\n _method = 'GET';\n _url: URL = new URL(location.origin);\n _reqHeaders = new Headers();\n\n open(\n method: string,\n url: string | URL,\n async = true,\n username?: string | null | undefined,\n password?: string | null | undefined,\n ) {\n const u = new URL(url, location.pathname);\n if (username) {\n u.username = username;\n }\n if (password) {\n u.password = password;\n }\n this._url = u;\n this._method = method;\n return super.open(method, url, async, username, password);\n }\n setRequestHeader(name: string, value: string) {\n this._reqHeaders.append(name, value);\n }\n async send(body: Document | XMLHttpRequestBodyInit | null = null) {\n let bd = body;\n if (bd && bd instanceof Document) {\n bd = new Blob([new XMLSerializer().serializeToString(bd)], {\n type: bd.contentType,\n });\n }\n let req = new Request(this._url, {\n headers: this._reqHeaders,\n method: this._method,\n body: bd,\n credentials: this.withCredentials ? `include` : `omit`,\n });\n // TODO 发起请求前拦截\n req.headers.forEach((value, key) => {\n this.setRequestHeader(key, value);\n });\n if (req.body) {\n return super.send(await req.blob());\n }\n return super.send();\n }\n\n // _responseType: XMLHttpRequestResponseType = '';\n // get responseType(): XMLHttpRequestResponseType {\n // return 'blob';\n // }\n // set responseType(value: XMLHttpRequestResponseType) {\n // this._responseType = value;\n // }\n\n _onreadystatechange: XhrOnreadystatechangeType = null;\n\n _onload: XhrOnloadType = null;\n get onload(): XhrOnloadType {\n return this._onload;\n }\n set onload(value: XhrOnloadType) {\n if (value === null) {\n this._onload = null;\n } else {\n this._onload = async (ev) => {\n // https://github.com/github/fetch/blob/fb5b0cf42b470faf8c5448ab461d561f34380a30/fetch.js#L521\n\n const resp = new Response(this.response ?? this.responseText, {\n status: this.status,\n statusText: this.statusText,\n headers: parseHeaders(this.getAllResponseHeaders() || ``),\n });\n Object.defineProperty(resp, 'url', {\n value: this.responseURL ?? this.getResponseHeader(`X-Request-URL`),\n });\n // TODO 完全收到回复后拦截\n\n const blob = await resp.blob();\n\n if (this.responseType == 'text' || this.responseType == '') {\n } else if (this.responseType == 'arraybuffer') {\n } else if (this.responseType == 'blob') {\n } else if (this.responseType == 'json') {\n } else if (this.responseType == 'document') {\n // TODO\n }\n value.call(this, ev);\n };\n }\n }\n };\n};\n\nexport const buildXhrInterceptorManager = () => {\n fakeXhr.apply;\n};\n\n/**\n * https://juejin.cn/post/6938308842849566727#heading-16\n * https://bbs.tampermonkey.net.cn/thread-3284-1-1.html\n *\n */\n"],"mappings":"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","names":["node","nodes","GM_xmlhttpRequest","GM_xmlhttpRequest"]}