{"version":3,"file":"fileAjax.mjs","sources":["../../../../packages/utils/fileAjax.ts"],"sourcesContent":["import { ajaxSign } from './sign'\n\nexport interface FileAjaxOptions {\n\taction: string\n\tdata?: FormData\n\theaders?: object\n\twithCredentials?: boolean\n\t// 调整onError参数类型，让错误信息更结构化\n\tonError: (\n\t\terror: {\n\t\t\ttype: 'network_error' | 'http_error' | 'parse_error' | 'upload_error'\n\t\t\tmessage: string\n\t\t\tstatus: number\n\t\t\tresponse?: any\n\t\t\tevent?: Event\n\t\t\tstatusText?: string // 新增：添加statusText可选属性\n\t\t},\n\t\tstatus: number\n\t) => void\n\tonSuccess: (response: any, status: number) => void\n\tonProgress: (response: ProgressEvent) => void\n}\n\n// 解析响应内容，增加错误捕获的详细信息\nfunction getBody(xhr: XMLHttpRequest): any {\n\tconst text = xhr.responseText || xhr.response\n\tif (!text) {\n\t\treturn text\n\t}\n\n\ttry {\n\t\treturn JSON.parse(text)\n\t} catch (e: any) {\n\t\t// 返回解析错误的详细信息，而不只是原始文本\n\t\treturn {\n\t\t\trawText: text,\n\t\t\tparseError: {\n\t\t\t\tmessage: e.message,\n\t\t\t\tstack: e.stack\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const fileAjax = (option: FileAjaxOptions) => {\n\tif (typeof XMLHttpRequest === 'undefined') {\n\t\t// 触发环境不支持的错误\n\t\toption.onError(\n\t\t\t{\n\t\t\t\ttype: 'network_error',\n\t\t\t\tmessage: '当前环境不支持 XMLHttpRequest',\n\t\t\t\tstatus: 0\n\t\t\t},\n\t\t\t0\n\t\t)\n\t\treturn\n\t}\n\n\tconst xhr = new XMLHttpRequest()\n\tconst action = option.action\n\n\t// 1. 网络错误处理（断网、连接失败等）\n\txhr.onerror = function error(e: Event) {\n\t\toption.onError(\n\t\t\t{\n\t\t\t\ttype: 'network_error',\n\t\t\t\tmessage: '网络请求失败',\n\t\t\t\tstatus: xhr.status,\n\t\t\t\tevent: e\n\t\t\t},\n\t\t\txhr.status\n\t\t)\n\t}\n\n\t// 2. 上传进度回调（保持原有逻辑）\n\txhr.upload.addEventListener(\n\t\t'progress',\n\t\tfunction (e: ProgressEvent) {\n\t\t\toption.onProgress(e)\n\t\t},\n\t\tfalse\n\t)\n\n\t// 3. 上传超时处理（新增，避免请求无响应）\n\txhr.ontimeout = function (e: ProgressEvent) {\n\t\toption.onError(\n\t\t\t{\n\t\t\t\ttype: 'network_error',\n\t\t\t\tmessage: '文件上传请求超时',\n\t\t\t\tstatus: 0,\n\t\t\t\tevent: e\n\t\t\t},\n\t\t\t0\n\t\t)\n\t}\n\n\t// 4. 加载完成处理（区分成功/失败）\n\txhr.onload = function onload() {\n\t\t// 成功状态码：200-299\n\t\tif (xhr.status >= 200 && xhr.status < 300) {\n\t\t\tconst response = getBody(xhr)\n\t\t\t// 检查是否是解析错误\n\t\t\tif (response?.parseError) {\n\t\t\t\toption.onError(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'parse_error',\n\t\t\t\t\t\tmessage: `响应内容解析失败: ${response.parseError.message}`,\n\t\t\t\t\t\tstatus: xhr.status,\n\t\t\t\t\t\tresponse: response.rawText\n\t\t\t\t\t},\n\t\t\t\t\txhr.status\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t\toption.onSuccess(response, xhr.status)\n\t\t} else {\n\t\t\t// HTTP错误（4xx/5xx）：返回完整的错误信息\n\t\t\tconst response = getBody(xhr)\n\t\t\toption.onError(\n\t\t\t\t{\n\t\t\t\t\ttype: 'http_error',\n\t\t\t\t\tmessage: `HTTP请求失败: ${xhr.status} ${xhr.statusText}`,\n\t\t\t\t\tstatus: xhr.status,\n\t\t\t\t\tresponse: response,\n\t\t\t\t\t// 补充返回状态文本，方便调试\n\t\t\t\t\tstatusText: xhr.statusText\n\t\t\t\t},\n\t\t\t\txhr.status\n\t\t\t)\n\t\t}\n\t}\n\n\t// 5. 取消请求的处理（可选，新增）\n\txhr.onabort = function (e: Event) {\n\t\toption.onError(\n\t\t\t{\n\t\t\t\ttype: 'network_error',\n\t\t\t\tmessage: '请求被手动取消',\n\t\t\t\tstatus: 0,\n\t\t\t\tevent: e\n\t\t\t},\n\t\t\t0\n\t\t)\n\t}\n\n\txhr.open('post', action, true)\n\n\t// 设置是否携带凭证\n\tif (option.withCredentials && 'withCredentials' in xhr) {\n\t\txhr.withCredentials = true\n\t}\n\n\t// 设置请求头\n\tconst headers = option.headers || {}\n\tfor (const item in headers) {\n\t\tif (Object.prototype.hasOwnProperty.call(headers, item) && headers[item] !== null) {\n\t\t\txhr.setRequestHeader(item, headers[item])\n\t\t}\n\t}\n\n\t// 签名处理（保持原有逻辑）\n\tajaxSign(action, option.data, xhr, true)\n\n\t// 发送请求\n\txhr.send(option.data)\n\n\t// 返回xhr对象，方便外部取消请求等操作\n\treturn xhr\n}\n"],"names":[],"mappings":"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"}