(kData: any)
| 115 | }; |
| 116 | |
| 117 | export const dataEncode = async (kData: any) => { |
| 118 | if (kData?.then) { |
| 119 | kData = await kData; |
| 120 | } |
| 121 | if (kData instanceof Document) { |
| 122 | throw new Error("GM xhr data does not support Document"); |
| 123 | } |
| 124 | // 处理数据 |
| 125 | let extData = { |
| 126 | type: kData === undefined ? "undefined" : kData === null ? "null" : "undefined", |
| 127 | m: null, |
| 128 | } as { |
| 129 | type: string; |
| 130 | m: any; |
| 131 | }; |
| 132 | if (kData instanceof ReadableStream) { |
| 133 | kData = await new Response(kData).blob(); |
| 134 | } |
| 135 | if (kData instanceof DataView) { |
| 136 | const uint8Copy = new Uint8Array(kData.buffer, kData.byteOffset, kData.byteLength); |
| 137 | extData = { |
| 138 | type: "DataView", |
| 139 | m: uint8ToBase64(uint8Copy), |
| 140 | }; |
| 141 | } else if (kData instanceof URLSearchParams) { |
| 142 | // `${new URLSearchParams('你=好')}` -> '%E4%BD%A0=%E5%A5%BD' |
| 143 | // new URLSearchParams('%E4%BD%A0=%E5%A5%BD').get('你') -> '好' |
| 144 | extData = { |
| 145 | type: "URLSearchParams", |
| 146 | m: `${kData}`, // application/x-www-form-urlencoded percent-encoded |
| 147 | }; |
| 148 | } else if (kData instanceof FormData) { |
| 149 | // 处理FormData |
| 150 | // param.dataType = "FormData"; |
| 151 | // 处理FormData中的数据 |
| 152 | const data = (await Promise.all( |
| 153 | [...kData.entries()].map(([key, val]) => |
| 154 | val instanceof File |
| 155 | ? Promise.resolve(innerToBlobUrl(val)).then( |
| 156 | (url) => |
| 157 | ({ |
| 158 | key, |
| 159 | type: "file", |
| 160 | val: url, |
| 161 | mimeType: val.type, |
| 162 | filename: val.name, |
| 163 | lastModified: val.lastModified, |
| 164 | }) as GMSend.XHRFormDataFile |
| 165 | ) |
| 166 | : ({ |
| 167 | key, |
| 168 | type: "text", |
| 169 | val, |
| 170 | } as GMSend.XHRFormDataText) |
| 171 | ) |
| 172 | )) as GMSend.XHRFormData[]; |
| 173 | // param.data = data; |
| 174 | extData = { |
no test coverage detected