UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 3.88 kB
{"version":3,"file":"ajax.mjs","sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { hasOwn } from '@vue/shared'\nimport type {\n ElUploadProgressEvent,\n ElUploadRequestOptions,\n ElUploadAjaxError,\n} from './upload.type'\n\nfunction getError(\n action: string,\n option: ElUploadRequestOptions,\n xhr: XMLHttpRequest\n) {\n let msg: string\n if (xhr.response) {\n msg = `${xhr.response.error || xhr.response}`\n } else if (xhr.responseText) {\n msg = `${xhr.responseText}`\n } else {\n msg = `fail to ${option.method} ${action} ${xhr.status}`\n }\n\n const err = new Error(msg) as ElUploadAjaxError\n err.status = xhr.status\n err.method = option.method\n err.url = action\n return err\n}\n\nfunction getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {\n const text = xhr.responseText || xhr.response\n if (!text) {\n return text\n }\n\n try {\n return JSON.parse(text)\n } catch (e) {\n return text\n }\n}\n\nexport default function upload(option: ElUploadRequestOptions) {\n if (typeof XMLHttpRequest === 'undefined') {\n return\n }\n\n const xhr = new XMLHttpRequest()\n const action = option.action\n\n if (xhr.upload) {\n xhr.upload.onprogress = function progress(e) {\n if (e.total > 0) {\n ;(e as ElUploadProgressEvent).percent = (e.loaded / e.total) * 100\n }\n option.onProgress(e)\n }\n }\n\n const formData = new FormData()\n\n if (option.data) {\n Object.keys(option.data).forEach((key) => {\n formData.append(key, option.data[key])\n })\n }\n\n formData.append(option.filename, option.file, option.file.name)\n\n xhr.onerror = function error() {\n option.onError(getError(action, option, xhr))\n }\n\n xhr.onload = function onload() {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr))\n }\n\n option.onSuccess(getBody(xhr))\n }\n\n xhr.open(option.method, action, true)\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true\n }\n\n const headers = option.headers || {}\n\n for (const item in headers) {\n if (hasOwn(headers, item) && headers[item] !== null) {\n xhr.setRequestHeader(item, headers[item])\n }\n }\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n xhr.setRequestHeader(key, value)\n })\n }\n\n xhr.send(formData)\n return xhr\n}\n"],"names":[],"mappings":";;AAOA,kBACE,QACA,QACA,KACA;AACA,MAAI;AACJ,MAAI,IAAI,UAAU;AAChB,UAAM,GAAG,IAAI,SAAS,SAAS,IAAI;AAAA,aAC1B,IAAI,cAAc;AAC3B,UAAM,GAAG,IAAI;AAAA,SACR;AACL,UAAM,WAAW,OAAO,UAAU,UAAU,IAAI;AAAA;AAGlD,QAAM,MAAM,IAAI,MAAM;AACtB,MAAI,SAAS,IAAI;AACjB,MAAI,SAAS,OAAO;AACpB,MAAI,MAAM;AACV,SAAO;AAAA;AAGT,iBAAiB,KAAiD;AAChE,QAAM,OAAO,IAAI,gBAAgB,IAAI;AACrC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA;AAGT,MAAI;AACF,WAAO,KAAK,MAAM;AAAA,WACX,GAAP;AACA,WAAO;AAAA;AAAA;gBAIoB,QAAgC;AAC7D,MAAI,OAAO,mBAAmB,aAAa;AACzC;AAAA;AAGF,QAAM,MAAM,IAAI;AAChB,QAAM,SAAS,OAAO;AAEtB,MAAI,IAAI,QAAQ;AACd,QAAI,OAAO,aAAa,kBAAkB,GAAG;AAC3C,UAAI,EAAE,QAAQ,GAAG;AACf;AAAC,QAAC,EAA4B,UAAW,EAAE,SAAS,EAAE,QAAS;AAAA;AAEjE,aAAO,WAAW;AAAA;AAAA;AAItB,QAAM,WAAW,IAAI;AAErB,MAAI,OAAO,MAAM;AACf,WAAO,KAAK,OAAO,MAAM,QAAQ,CAAC,QAAQ;AACxC,eAAS,OAAO,KAAK,OAAO,KAAK;AAAA;AAAA;AAIrC,WAAS,OAAO,OAAO,UAAU,OAAO,MAAM,OAAO,KAAK;AAE1D,MAAI,UAAU,iBAAiB;AAC7B,WAAO,QAAQ,SAAS,QAAQ,QAAQ;AAAA;AAG1C,MAAI,SAAS,kBAAkB;AAC7B,QAAI,IAAI,SAAS,OAAO,IAAI,UAAU,KAAK;AACzC,aAAO,OAAO,QAAQ,SAAS,QAAQ,QAAQ;AAAA;AAGjD,WAAO,UAAU,QAAQ;AAAA;AAG3B,MAAI,KAAK,OAAO,QAAQ,QAAQ;AAEhC,MAAI,OAAO,mBAAmB,qBAAqB,KAAK;AACtD,QAAI,kBAAkB;AAAA;AAGxB,QAAM,UAAU,OAAO,WAAW;AAElC,aAAW,QAAQ,SAAS;AAC1B,QAAI,OAAO,SAAS,SAAS,QAAQ,UAAU,MAAM;AACnD,UAAI,iBAAiB,MAAM,QAAQ;AAAA;AAAA;AAIvC,MAAI,mBAAmB,SAAS;AAC9B,YAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC9B,UAAI,iBAAiB,KAAK;AAAA;AAAA;AAI9B,MAAI,KAAK;AACT,SAAO;AAAA;;;;"}